C#简单的面试题目(三)
31.C#提供一个默认的无参构造函数,当我实现了另外一个有一个参数的构造函数时,还想保留这个无参数的构
造函数。这样我应该写几个构造函数?
两个,一旦你实现了一个构造函数,C#就不会再提供默认的构造函数了,所以需要手动实现那个无参构造函数。
32.const和readonly有什么区别?
const关键字用来声明编译时常量,readonly用来声明运行时常量。
33.
用sealed修饰的类有什么特点
sealed 修饰符用于防止从所修饰的类派生出其它类。如果一个密封类被指定为其他类的基类,则会发生编译时错误。
密封类不能同时为抽象类。
sealed修饰符主要用于防止非有意的派生,但是它还能促使某些运行时优化。具体来说,由于密封类用于不会有任何派生类,所以对密封类的实例的虚拟函数成员的调用可以转换为非虚拟调用来处理。
34.虚函数的用法
virtual指明一成员函数为虚函数,而virtual仅用于类的定义里,在类外可不加此关键字。
一个类的成员函数被定义为虚函数时,子类该函数仍保持虚函数特性。
子类覆盖此函数时,定义里可不加virtual关键字,但函数声明要和基类的完全一致!且此声明是必须的。
不是纯虚函数时,父类的虚函数必须要实现。而若将父类的虚函数设定为纯虚函数时,子类必须覆盖之而且必须要实现之。
35.解释virtual、sealed、override和abstract的区别
virtual申明虚方法的关键字,说明该方法可以被重写
sealed说明该类不可被继承
override重写基类的方法
abstract申明抽象类和抽象方法的关键字,抽象方法不提供实现,由于子类实现,抽象类不可实例化。
36.重载和覆写有什么区别?
重载是方法的名称相同,不同的参数类型,不同的参数个数,不同的参数顺序。覆写提供了子类中改变父类方法行为的实现(是进行基类中函数的重写)。
37.能够将非静态的方法覆写为静态方法吗?
不能,覆写方法的签名必须与被覆写方法的签名保持一致,除了将virtual改为override。
38.C#中委托是什么?事件是不是一种委托?
委托可以把一个方法作为参数传递给另一个方法。委托可以理解为指向一个函数的引用。
是的,是一种特殊的委托。
39.C#中的堆与栈
栈(stack)由系统管理生存期,存储代码执行和调用路径,执行或调用完毕即从栈中清除。
堆(Heap)中保存值和对象,调用完毕之后依然存在,由垃圾回收器查找栈中有无指向该值或对象的引用,无则从堆中删除
40.对泛型的了解,和简单说明一下泛型有什么好处?
泛型,通过参数化类型来实现在同一份代码上操作多种数据类型。利用参数化类型将类型抽象化,从而实现灵活的复用。
好处是——类型安全,减少装箱和拆箱,提高性能,减少重复性的编程任务。
41.如何把一个Array复制到ArrayList中
int[] a = new int[3] { 1, 2, 3 }; ArrayList array = new ArrayList(a); array.AddRange(a);
42.产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。
int[] intArr=new int[100]; ArrayList myList=new ArrayList(); Random rnd=new Random(); while(myList.Count<100) { int num=rnd.Next(1,101); if(!myList.Contains(num)) myList.Add(num); } for(int i=0;i<100;i++) intArr[i]=(int)myList[i];
43.一个长度为10000的字符串,通过随机从a-z中抽取10000个字符组成。
StringBuilder sb = new StringBuilder(0, 10000); string strABC = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z"; string[] ABC = strABC.Split(','); int len = ABC.Length; Random rd = new Random(); for (int i = 0; i < 10000; i++) { sb.Append(ABC[rd.Next(len)]); }
44.请简述一下用Socket进行同步通讯编程的详细步骤
- 在应用程序和远程设备中使用协议和网络地址初始化套接字
- 在应用程序中通过指定端口和地址建立监听
- 远程设备发出连接请求
- 应用程序接受连接产生通信scoket
- 应用程序和远程设备开始通讯(在通讯中应用程序将挂起直到通讯结束)
- 通讯结束,关闭应用程序和远程设备的Socket回收资源
45.什么是强类型,什么是弱类型?哪种更好些?为什么?
强类型是在编译的时候就确定类型的数据,在执行时类型不能更改,而弱类型在执行的时候才会确定类型。没有
好不好,二者各有好处,强类型安全,因为它事先已经确定好了,而且效率高。一般用于编译型编程语
言,如c++,java,c#,pascal等,弱类型相比而言不安全,在运行的时候容易出现错误,但它灵活,多用于解释型编
程语言,如javascript,vb等