1、接口:所谓接口,可以理解成一种协议和标准。它提供给继承他的所有的类一个标准(比如说:属性、方法返回值、参数等),这样可以简化代码,程序可扩张性提高。
用法:一个方法如果需要引用到某些类做参数,而这些类的返回结果都一样,只是实现方法不同,传统的用法是用方法重载(参数不同,也就是各个类作为不同的参数引进),但是如果这些类都继承实现了某一个接口的话,只要把引用这些类的参数换成这个接口就行,要用到具体哪个类再用 “接口=new 类” 实例化就行了
2、类里面的属性和字段的区别:类里面的字段可以理解成类里面的局部变量,也就是类里面的方法需要用到的传值等操作的变量(外部直接操作安全性降低),属性可以理解成为用来描述类的一些特征的特殊“字段(相当于值)”,它的出现,可以通过外部赋值动态改变类里面字段的值,也就是局部变量,这样类相当于外界来说就可以成为动态的;
属性是逻辑字段,有更强的控制性;属性是字段的扩展,源于字段;属性不直接对应于存储位置,于属性只是将字段包装起来,所以属性并不占用实际的内存,真正占内存位置及空间的是字段。简单地说:属性是被外部使用的,字段是被内部使用的
3、声明于定义的区别:声明不为变量分配空间,而定义为变量分配空间,因此同一个变量的声明可以出现多次,而只能定义一次。 (在C中函数的声明是可以重复的,但是变量却不可以。对于变量的声明都会分配内存空间,只是这部分内存空间里存放的是随机值,直到被定义之后将赋予相应的值。);声明变量一般是全局函数里面的变量,而定义变量可以是全局变量,也可以是局部变量;声明变量就是说明一个变量,它的类型,名字等,而定义一个变量则还要对它进行初始化。
4、委托(代理)的概念:一般来说,方法是不可以用来做参数的,但是因为有了委托这个机制,方法就可以用来做一个类的特殊参数(简单地说,带方法参数的类就可以构成委托,这是委托的特征);委托是把一个类中的方法经过封装后可以供别的类来调用(一般方法都是自身类调用),静态方法和实例方法都可以传送,这跟C++中用函数指针传递函数同理。通过委托,使类中的方法成为一个常量进行传递)
委托需要4个步骤:
(1)定义一个输入参数与要进行封装的方法完全相同的代理对象。
public delegate void GreetingDelegate(string name);//定义委托,它定义了可以代表的方法的类型
(2)定义所有输入参数与在第1步中定义的代理对象相同的方法。
public void EnglishGreeting(string name)
{
Console.WriteLine("Morning, " + name);
}
public void ChineseGreeting(string name)
{
Console.WriteLine("早上好, " + name);
}
(3)创建代理对象,并与希望封装的方法进行连接。 (多形式)
3.1
GreetingDelegate delegate1 = new GreetingDelegate(EnglishGreeting);//直接用构造函数连接方法
delegate1 += ChineseGreeting; // 给此委托变量再绑定一个方法
3.2
GreetingDelegate delegate1 = new GreetingDelegate();
delegate1 = EnglishGreeting; //赋值连接方法
delegate1 += ChineseGreeting; // 给此委托变量再绑定一个方法
3.3//隐式连接
private static void GreetPeople(string name, GreetingDelegate MakeGreeting) //要调用委托的地方
{
MakeGreeting(name);
}
static void Main(string[] args)
{
GreetPeople("Jimmy Zhang", EnglishGreeting);
GreetPeople("张子阳", ChineseGreeting);
Console.ReadKey();
}
(4)通过代理对象调用封装的方法。(多形式)
private static void GreetPeople(string name, GreetingDelegate MakeGreeting) //要调用委托的地方
{
MakeGreeting(name);
}
!注意:被连接方法的实际参数在程序调用委托的时候提供
4.1//显式通过委托调用
static void Main(string[] args)
{
GreetingDelegate delegate1, delegate2;
delegate1 = EnglishGreeting;
delegate2 = ChineseGreeting;
GreetPeople("Jimmy Zhang", delegate1);
GreetPeople("张子阳", delegate2);
Console.ReadKey();
}
4.2//隐式绕过委托调用
static void Main(string[] args)
{
GreetPeople("Jimmy Zhang", EnglishGreeting);
GreetPeople("张子阳", ChineseGreeting);
Console.ReadKey();
}