1.抽象类与接口的使用情况:
①属性与方法默认为private,抽象类表示对象是什么,也就是有哪些独有的属性,抽象类不能被实例,但是派生类可以;
②接口声明默认是 public 的,抽象类在某种程度上与接口类似,但是,它们大多只是用在当只有少数方法由基类声明由派生类实现时,亦可以定义属性,但是子类必须要进行实现;
③接口使得实现接口的类或结构在形式上保持一致。接口本身并不实现任何功能,它只是和声明实现该接口的对象订立一个必须实现哪些行为的契约。
④使用说明:
※一般我们在内部人员使用的话,使用到抽象类;
※一般如果封装成库,需要使用接口,将程序暴露出去,供别人调用;
⑤总结感悟参考(引用)文章链接:
使用抽象类是为了代码的复用,而使用接口的动机是为了实现多态性。所以,如果你在为某个地方该使用接口还是抽象类而犹豫不决时,那么可以想想你的动机是什么。
看到有朋友对IPerson这个接口的质疑,我个人的理解是,IPerson这个接口该不该定义,关键看具体应用中是怎么个情况。如果我们的项目中有Women和Man,都继承Person,而且Women和Man绝大多数方法都相同,只有一个方法DoSomethingInWC()不同(例子比较粗俗,各位见谅),那么当然定义一个AbstractPerson抽象类比较合理,因为它可以把其他所有方法都包含进去,子类只定义DoSomethingInWC(),大大减少了重复代码量。
但是,如果我们程序中的Women和Man两个类基本没有共同代码,而且有一个PersonHandle类需要实例化他们,并且不希望知道他们是男是女,而只需把他们当作人看待,并实现多态,那么定义成接口就有必要了。
⑥结合实际情况自身总结:
1.如果两个或者多个类的成员类似,包括成员变量与方法成员,举个例子,控制卡的类,有A3200、Soloist、ACS,其中都有连接标志、轴列表、归零标志等成员变量,有连接方法、归零方法、行为方法等,那么我们选用抽象类去做处理。
2.一般我们为了提高代码的复用程度,选用抽象类去高度制定一个模式出来,让其子类进行重写与继承,即可实现对象实例调用时候的多态性。
3.如果要使用接口时候,其实大部分情况都用接口来实现多态,不过代码量稍微大一些,无论什么变量都要进行重写,不过也较为简单的实现各个子类动作的统一处理。
2.虚方法的使用场景:
①一般想在基类中的方法,添加一点方法体输出,可选用虚方法;如果你想只在基类中声明一个方法,不做任何处理的话,可以选用抽象方法;
②虚方法可以在抽象类或者普通类中使用,一般在抽象类中使用;
③虚方法不能在接口类中使用,因为接口类中的方法只进行声明,不进行方法体的编写,无{}以及其内容;
④如果实例化调用,程序会优先去子类中寻找虚方法的重写方法体,如果有,立刻执行,如果没有就会去基类中寻找虚方法的方法体进行执行;
3.类的详解:
①类中含有成员变量与成员方法;
②成员变量一般称呼上可以叫做字段;
③在C#中,我们可以非常自由的、毫无限制的访问公有字段,但在一些场合中,我们可能希望限制只能给字段赋于某个范围的值、或是要求字段只能读或只能写,或是在改变字段时能改变对象的其他一些状态,这些单靠字段是无法做到的,于是就有了属性;
④属性不可以存储值,但是字段可以;
class MyClass
{
Private string name;
public string Name
{
get {return Name;}
set {Name=value;}
}
}