C# 接口、抽象类、虚方法详解

本文探讨了抽象类与接口在代码复用和多态性方面的应用,强调了选择抽象类还是接口应根据动机来决定。同时,介绍了虚方法的使用场景,如在基类中添加部分实现或仅声明方法。此外,还概述了类中的成员变量、属性及其作用。
摘要由CSDN通过智能技术生成

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;}  
  } 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Heschel

您的鼓励是我创作的最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值