**
C#抽象类与接口的区别、联系???
**
c#接口的定义、类型?首先说一说什么是接口,简单来说接口就是对一组方发法的统一命名,这些方法没有提供任何的实现,也就是把一些方法放在一个接口中,让继承自接口的类去实现它。接口 的定义和类的定义很相似,只是关键字不同,接口 的关键字是interface来定义,**特别注意的是**在接口中定义的方法不能添加任何修饰符,因为在接口中的方法默认为public,如果显示指定了修饰符,则编译会出错。
接口是一套规范,遵守这个规范就可以实现功能。
- 接口中只定义方法的原型,不能有字段和常量;
- 继承接口的类必须实现接口中所有的方法才能实例化。
- 隐式接口与显示接口的的区别
A.隐式接口没有具体指明实现的的是哪个接口中的方法;而显示接口,它在实现的过程中明确地指出了是哪个接口中的哪个方法,当一个类中实现多个接口;而且这些接口中包含相同返回值,方法名称和参数类型时,隐式接口的实现就会出现命名冲突的问题。
B.显示接口的实现则能解决类似于上述中实现多个接口中方式时,命名冲突的问题。显示接口的实现需要注意以下几个问题:**(1).若显示实现接口,方法不能使用任何访问修饰符,显示实现的成员默认为私有;(2).显示实现的成员默认是私有的,所以这些成员是不能通过类的对象进行访问的。
抽象类的定义:抽象类使用abstract关键字修饰,抽象类包含0到多个抽象方法的类,其不能被实例化。含有抽象方法的类必须是抽象类,抽象类可以包含非抽象方法。重写抽象类的方法用override关键字。
- 虚方法(virtual)与抽象方法(abstract)的区别
- 虚方法必须要有方法体,抽象方法不允许有方法体;
- 虚方法可以被子类(派生类)重载(override),抽象方法必须被子类重载;
- 虚方法除了在密封类中都可以写,抽象方法只能在抽象类中写。**
**
C#之 静态构造函数和非静态构造函数之间区分与联系???
**静态构造函数和非静态构造函数:静态构造函数:在构造函数前面加了static关键字之后形成的,没有修饰符(piblic,private)、没有参数。
特点=》1、静态构造函数没有修饰符修饰(public,private),因为静态构造函数不是我们程序员调用的,是由.net 框架在合适的时机调用的。
2、静态构造函数没有参数,因为框架不可能知道我们需要在函数中添加什么参数,所以规定不能使用参数。
3、静态构造函数前面必须是static 关键字。如果不加这个关键字,那就是普通的构造函数了。
4、静态构造函数中不能实例化实例变量。(变量可以分为类级别和实例级别的变量,其中类级别的有static关键字修饰)。
5、静态函数的调用时机,是在类被实例化或者静态成员被调用的时候进行调用,并且是由.net框架来调用静态构造函数来初始化静态成员变量。
6、一个类中只能有一个静态构造函数。
7、无参数的静态构造函数和无参数的构造函数是可以并存的。因为他们一个属于类级别,一个属于实例级别,并不冲突。
8、静态构造函数只会被执行一次。并且是在特点5中的调用时机中进行调用。
9、如果没有在类中写构造函数,那么框架会为我们生成一个构造函数,那么如果我们在类中定义了静态变量,但是又没有定义静态构造函数,那么框架也会帮助我们来生成一个静态构造函数来让框架自身来调用。
**
字符串的拼接“+“和concat的区别:
**1. +可以是字符串或者数字及其他基本类型数据,而concat只能接受字符串。
2. +左右都可以为null、concat会是空指针。
3. 从字节码来看+号编译后就是使用了StringBuiler来拼接,所以一行+++的语句就会创建一个StringBuilder,多条+++语句就会创建多个,所以为什么建议用StringBuilder的原因。
**
C#中的委托Delegate的Invoke、BeginInvoke?
1、Delegate.Invoke (委托同步调用)
a、委托的Invoke方法,在当前线程中执行委托。
b、委托执行时阻塞当前线程,知道委托执行完毕,当前线程才继续向下执行。
c、委托的Invoke方法,类似方法的常规调用。
2、Delegate.BeginInvoke (委托异步调用)
a、委托的BeginInvoke方法,在线程池分配的子线程中执行委托
b、委托执行时不会阻塞主线程(调用委托的BeginInvoke线程),主线程继续向下执行。
c、委托执行时会阻塞子线程。
d、委托结束时,如果有返回值,子线程讲返回值传递给主线程;如果有回调函数,子线程将继续执行回调函数。
**
C#字典Dictionary和KeyValuePair的关系?
**keyvaluepair是一个结构体(sreuct)、它只包含一个key、value的键值对。dictionary可以简单的看作是keyvaluepair的集合、dictionary可以包含多个key、value的键值对。
c#代码示例: