C#笔试总结

 

 

题一:

程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言)
要求:  
            <1>.构造出Cat、Mouse、Master三个类,并能使程序运行
            <2>从Mouse和Master中提取抽象
            <3>联动效应,只要执行Cat.Cryed()就可以使老鼠逃跑,主人惊醒。

using System;
using System.Collections;
using System.Collections.Generic  ;

namespace gtkTest
{
    public class ObserverClass
    {
        public ObserverClass ()
        {
            
        }
        public  static void  ObserverFun ()
        {
            Cat cat = new Cat();
            Mouse mouse1 = new Mouse("mouse1", cat);
            Mouse mouse2 = new Mouse("mouse2", cat);
            Master master = new Master(cat);
            cat.Cry();
        }
        public interface Observer
        {
            void Response();    //观察者的响应,如是老鼠见到猫的反映
        }
        public interface Subject
        {
            void AimAt(Observer obs);  //针对哪些观察者,这里指猫的要扑捉的对象---老鼠
        }
        public class Mouse : Observer
        {
            private string name;
            public Mouse(string name, Subject subj)
            {          
                this.name = name;
                subj.AimAt(this);
            }

            public void Response()
            {
                Console.WriteLine(name + " attempt to escape!");
            }
        }
        public class Master : Observer
        {  
            public Master(Subject subj)
            {          
                subj.AimAt(this);
            }

            public void Response()
            {
                Console.WriteLine("Host waken!");
            } 
        }

        public class Cat : Subject
        {
            private ArrayList observers;
            public Cat()
            {  
                this.observers = new ArrayList();
            }
            public void AimAt(Observer obs)
            {
                this.observers.Add(obs);
            }
            public void Cry()
            {
                Console.WriteLine("Cat cryed!");
                foreach (Observer obs in this.observers)
                {
                    obs.Response();
                }
            }
        }


    }
}

//2

using System;

namespace gtkTest
{
    public class ObserverDeleClass
    {
        public ObserverDeleClass ()
        {
            
        }
        public static  void ObserverDeleFun ()
        {
            Cat cat = new Cat();
            Mouse mouse1 = new Mouse("ObserverDelemouse1", cat);
            Mouse mouse2 = new Mouse("ObserverDelemouse2", cat);
            Master master = new Master(cat);
            cat.Cry();
        }
        //---------------------------------------------------------------------------------------------
        //设计方法二: 使用event -- delegate设计..
        public delegate void SubEventHandler();
        public abstract class Subject
        {
            public event SubEventHandler SubEvent;
            protected void FireAway()
            {
                if (this.SubEvent != null)
                    this.SubEvent();
            }  
        }
        public class Cat : Subject
        { 
            public void Cry()
            {
                Console.WriteLine("ObserverDelecat cryed.");
                this.FireAway();
            }
        }
        public abstract class Observer
        {
            public Observer(Subject sub)
            {
                sub.SubEvent += new SubEventHandler(Response);
            }
            public abstract void Response();   
        }
        public class Mouse : Observer
        {
            private string name;
            public Mouse(string name, Subject sub) : base(sub)
            {  
                this.name = name;
            }
            public override void Response()
            {
                Console.WriteLine(name + " attempt to escape!");
            }
        }
        public class Master : Observer
        {
            public Master(Subject sub) : base(sub){}
            public override void Response()
            {
                Console.WriteLine("ObserverDelehost waken");
            }
        }

    }
}
//3

gtkTest.ObserverDeleClass.ObserverDeleFun();

        gtkTest.ObserverClass.ObserverFun ();

  

 

 

参考: https://blog.csdn.net/hunterxray/article/details/1532674

题二:

 

一列数的规则如下: 1、1、2、3、5、8、13、21、34......  求第30位数是多少, 用递归算法实现

public class MainClass   
    {   
        public static void Main()     
        {   
            Console.WriteLine(Foo(30));   
        }   
  
        public static int Foo(int i)   
        {   
            if (i <= 0)   
                return 0;   
            else if(i > 0 && i <= 2)   
                return 1;   
            else return Foo(i -1) + Foo(i - 2);   
        }   
    }   

参考:https://blog.csdn.net/zhangzuqing/article/details/20208385

 

题三

 

 

using System;

namespace gtkTest
{
    public class MyClassv
    {
        public MyClassv ()
        {
            v1++;
            v2++;
        }
        public static int v1;
        public  int v2;
        public  static void  MyClassvFun ()
        {
            MyClassv mc1 = new MyClassv (), mc2 = new MyClassv ();
            Console.WriteLine("{0}{1}{2}",MyClassv.v1,mc1.v2,mc2.v2);

        }
    }
}

  

 

gtkTest.MyClassv.MyClassvFun ();

  

注意:

 题四

  gtkTest.MyStringClass .MyStringClassFun();
  gtkTest.MyStringClass .MyIntClassFun();
  gtkTest.MyCountClass.MyCountClassFun ();

  

 

 

using System;

namespace gtkTest
{
    public class MyStringClass
    {
        public MyStringClass ()
        {
        }
        public  static void  MyStringClassFun ()
        {
            string sr1 = "123" + "abc";
            string sr2 = "123abc";
            Console.WriteLine(sr1==sr2);
            Console.WriteLine(System .Object.ReferenceEquals(sr1,sr2 ));
        }

        public  static void  MyIntClassFun ()
        {
            int i = 5;
            int j = 5;
            if(object.ReferenceEquals (i,j))Console.WriteLine("Equal");
            else Console.WriteLine("Not Equal");
        }
    }
}

  

 

 

using System;

namespace gtkTest
{
    public class MyCountClass
    {
        private  static  int count=0;
        static MyCountClass ()
        {
            count++;
        }
        public MyCountClass ()
        {
            count++;
        }
        MyCountClass o1=new MyCountClass();
        MyCountClass o2=new MyCountClass();
        public  static void  MyCountClassFun ()
        {
            //question is o1.Count,but  count static ,o1 is new not is static
            Console.WriteLine("{0}",MyCountClass.count );
        }
    }
}

  

 

 题五

 

 gtkTest .MyCallClass.MyCallClassFun(); 

  

using System;

namespace gtkTest
{
    public class MyCallClass
    {
        public MyCallClass ()
        {
        }

        abstract  class  BaseClass
        {
            public  virtual  void  MethodA(){}
            public  virtual  void  MethodB(){}

        }
        class  Class1:BaseClass 
        {
            public void MethodA(string arg){}
            public void MethodB(string arg){}
        }
        class  Class2:Class1  
        {
            new  public void MethodB(){}
        }
        public  static void  MyCallClassFun ()
        {
            Class2  o= new Class2 ();
            //Console.WriteLine(o.MethodA());
            o.MethodA();
        }
    }

}

  

请问, o.MethodA 调用的是? BaseClass.MethodA

    • Class2.MethodA
    • Class1.MethodA
    • BaseClass.MethodA
    • 都不是

 

posted @ 2018-06-21 20:44  wx_h13813744  阅读(191)  评论(0编辑  收藏  举报