接口-成员完全未实现
抽象类-成员未完全实现
接口成员的public abstract是隐式的
1个类只能有1个父类,但可以实现多个基接口
class/struct都可以实现多个接口
子类实现接口-public
子类重写父类虚方法-override
子类实现抽象类的方法-override
可以隐式的把1个对象转化为它实现的接口
ex2
MyLib-Foo.cs
MyLib-MyClass.cs
MyClass为internal,在其他assembly不可访问
MyLib-MyTool.cs
public static方法
返回值为object
创建1个MyClass的实例
ConsoleApp2-Program.cs
通过调用MyTool的静态方法创建1个MyClass的实例
它的类型为object,可以将这个对象转化为它实现的接口
然后访问它的方法
接口可以继承其他接口
显示的接口实现-避免实现多个接口的时候造成成员签名的冲突
方法重载和返回值无关,只和方法名和参数列表有关
如果实现的两个接口的方法签名完全一样,只需要实现1次就可以
显示的接口实现-写上接口名
int IBar.Do()
1//Foo
2//Bar
显示实现接口成员
1.避免实现多个接口的时候造成成员签名的冲突
2.故意隐藏那些对于类型来说不常用的成员-对应ex,IBar不常用
隐式实现的接口默认是sealed的-不能被继承
如果想要进行重写的话,必须在基类中把成员标记为virtual/abstract
1//c
2//进行了强转
3//因为父类parent是对接口的直接实现,子类仅仅是把父类的Do方法隐藏了
加vitrual和override
//重写-覆盖
//调的是继承链上最新的
显式实现的接口成员不能被标记为virtual
但可以对其进行重新实现
子类可以重新实现父类以及实现的接口成员
2//父类直接实现了这个接口
child也实现了接口IFoo
强转为父类Parent后调不到Do方法-因为Parent没有Do方法,叫IFoo.Do
如果父类没有显示实现,是正常实现的
此时强转后可以调到Do方法,输出Parent
在子类中重新实现接口主要适用于重写显式实现的接口成员
在子类中重新实现接口主要适用于重写显式实现的接口成员
问题-子类无法调用父类的方法
改进方法-设计1个无需重新实现的基类
调用struct上隐式实现的成员不会导致装箱
把struct转化为接口会导致装箱