C#笔试题

来源:互联网 发布:c语言99乘法表全部 编辑:程序博客网 时间:2024/04/29 20:38

1.什么是抽象类?

抽象类是含有一个或者多个抽象方法的类,抽象类不能实例化。

2.接口和抽象类的区别是什么?

接口用于规范,抽象类用于共性。接口中只能声明方法,属性,事件,索引器。而抽象类中可以有方法的实现,也可以定义非静态的类变量。抽象类是类,只能被单集继承。可以实现多个接口。在抽象类中加入一个方法,子类自动活得这个方法。在接口中加入新的方法,那么实现它的类就需要重写。接口成员被定义为公共的。抽象类的成员可以私有,受保护等。接口中不能包含字段、构造函数。

3.C# public,private protected修饰符


private : 私有成员, 在类的内部才可以访问。

protected : 保护成员,该类内部和继承类中可以访问。public : 公共成员,完全公开,没有访问限制。internal: 在同一命名空间内可以访问。。

4.重载

答:参数的类型,顺序、不同来确定重载函数。

5.写一个函数:一列数的规则如下1、1、2、3、5、8、13、21、34·····求第30位是

    public static int fib(int n)    {        if (n == 1 || n == 2)        {            return 1;        }        else        {            return fib(n - 1) + fib(n - 2);        }     }

6.使用sealed、virtual、override、abstract修饰的类有什么特点

sealed——“断子绝孙”
密封类不能被继承。密封方法可以重写基类中的方法,但其本身不能在任何派生类中进一步重写。当应用于方法或属性时,sealed修饰符必须始终与override一起使用
virtual——“为了子孙后代”
virtual关键字用于修改方法或属性的声明,在这种情况下,方法或属性被称做虚成员。虚成员的实现可由派生类中的重写成员更改
override——“一手遮天”
override修饰符来修改方法、属性、索引器或事件。主要是提供派生类对基类方法的新实现。覆盖上面abstract、virtual两种关键字修饰的成员。
由重写声明重写的方法称为重写基方法。重写基方法必须与重写方法具有相同的签名。
重写基方法必须是虚拟的、抽象或重写的。
修饰类名为抽象类,修饰方法为抽象方法。如果一个类为抽象类,则这个类智能是其他某个类的基类。抽象方法在抽象类中没有函数体。抽象类中的抽象方法是没有方法体的,继承其的子类必须实现抽象类的抽象方法

7.接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承实体类

接口是可以继承接口的,抽象类是可以实现接口的,抽象类可以继承实体类,但是有个条件,条件是,实体类必须要有明确的构造函数

8.什么是装箱和拆箱


装箱就是把值类型转换成引用类型,反之就是拆箱
  int a=5;
  string ss=a.tostring();装箱
  int a2=int.Parse(ss);拆箱

9.heap和stack的区别

**答**heap是堆,stack是栈。2.stack的空间由操作系统自动分配和释放,heap的空间是手动申请和释放的,heap常用new关键字来分配。3.stack空间有限,heap的空间是很大的自由区

10 进程和线程该怎么理解

进程是比线程大的程序运行单元。一个程序至少有一个进程,一个进程至少有一个线程。进程拥有独立的内存单元 ,线程共享内存。

11 const和readonly区别

**答**const是编译时常量,readonly是运行时常量。都是可读不可写。

12 死锁:指两个以上的进程执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞现象。

13 当一个线程进入一个对象的方法后,其他线程是否可以可以进入这个对象的方法?

不可以,一个对象的方法只能由一个线程访问。

14 c#是否可以对内存直接进行操作?

可以直接操作内存,使用unsafe情况下可以使用指针。

15 谈谈final,finally,finallize的区别?

final用于申明属性,方法和类,表示属性不可变,方法不可以被覆盖,类不可以被继承。
finally是异常处理语句结构中,表示总是执行的部分。
finallize表示object类的一个方法,在垃圾回收机制中执行会被调用回收对象。

16 c#中委托是什么?事件是不是一种委托?

委托是一种安全的类似与函数指针,它可以把方法作为一个参数传递给另一个方法。事件是一种消息机制,它是一种委托,委托不带方法体。

17 sealed 修饰的类有什么特点

  sealed 修饰符用于防止从所修饰的类派生出其它类。如果一个密封类被指定为其它类的基类,则会发生编译时错误。
  密封类不能同时为抽象类。
  sealed
修饰符主要用于防止非有意的派生,但是它还能促使某些运行时优化。具体说来,由于密封类永远不会有任何派生类,所以对密封类的实例的虚拟函数成员的调用可以转换为非虚拟调用来处理

18抽象类和接口什么区别:

答:声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。

接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。

19 ADO.net的几个类

:Connection数据库连接;Command执行SQL语句或存储过程;DataAdapter用于填充DataSet和更新数据库的一组数据命令和数据库连接,断开模式;DataReader,读取数据库信息,是只读向前的;DataSet数据在内存中的缓存。

20 什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?

答: (1) 应用程序域(通常为 AppDomain)是一个用于隔离应用程序的虚拟进程。
(2) 受管制的代码:Managed Code,官方翻译是“托管代码”,即在 .net中,由公共语言运行环境进行管理的代码,它主要负责内存管理。
(3)强类型系统:是对系统的类型进行细化定义,纯粹是概念问题
(4)装箱和拆箱:值类型转化引用类型为装箱,引用类型转化为值类型为拆箱。
(5)CTS:通用语言系统。CLS:通用语言规范。CLR:公共语言运行库。

21二分法

public static int BinarySearch(int[] arr, int low, int high, int key){    int mid = (low + high) / 2;    if (low > high)        return -1;    else    {        if (arr[mid] == key)            return mid;        else if (arr[mid] > key)            return BinarySearch(arr, low, mid - 1, key);        else            return BinarySearch(arr, mid + 1, high, key);    }}

22 冒泡

int temp;            int[] arrSort = new int[] { 10, 8, 3, 5, 6, 7, 9 };            for (int i = 0; i < arrSort.Length; i++)            {                for (int j = i + 1; j < arrSort.Length; j++)                {                    if (arrSort[j] < arrSort[i])                    {                        temp = arrSort[j];                        arrSort[j] = arrSort[i];                        arrSort[i] = temp;                    }                }            }
0 0