public interface MyInterface
{
/// 下面三個方法的簽名都是
/// .method public hidebysig newslot abstract virtual
/// public+virutal+abstract
void Method1();
void Method2();
void Method3();
}
class MyClass : MyInterface
{
/// Method1是Non-overridable的實現,是sealed。簽名如下
/// .method public final hidebysig newslot virtual
/// 注意:public+final+virtual
public void Method1() { }
/// Method2是Overridable的實現。簽名如下
/// .method public hidebysig newslot virtual
/// 注意:public+virtual
public virtual void Method2() { }
/// Method3是Explicit的實現,是sealed。簽名如下
/// .method private final hidebysig newslot virtual
/// 注意:private+final+virual
void MyInterface.Method3() { }
}
class MyDerived : MyClass
{
/// .method public hidebysig
/// Hidden了MyClass的Method1,所以要加new,否則warning
public new void Method1() { }
/// .method public hidebysig virtual
public override void Method2() { }
/// .method private hidebysig
void Method3() { }
}
總結:
Method2的實現是最常見的。
Method1的實現變成了sealed,用在不想被override的地方。
Method3的實現比較少見,一種情況是類實例不想對外暴露(private),但是在使用接口的地方又可以訪問;另一種是在繼承多個接口時,多個接口中相同的函數簽名。
MyInterface myclass = new MyClass();
myclass.Method3(); // OK
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。