您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

C#设计模式-派生类实现非虚接口陷阱的实例代码分享

2024/5/17 16:31:22发布31次查看
理解接口方法和虚方法的区别第一眼看来,实现接口和覆写虚方法似乎没有什么区别,实际上,实现接口和覆写虚方法之间的差别很大!!!
派生不能覆写接口的非虚成员接口中声明的成员方法默认情况下并非虚方法,所以,派生类不能覆写基类中实现接口的非虚成员。
看一个例子。
定义接口itest:
public interface itest { void test(); }
实现接口的base类和derive类
public class base:itest { public base() { console.writeline("this is base constructor"); } //实现itest接口 public void test() { console.writeline("this is in base to itest implement"); } } public class derive :base,itest { public derive() { console.writeline("this is derived constructor"); } //测试derive类实现了itest吗?? public void test() { console.writeline("this is in derive to itest implement"); } }
调用对象base和derive:
base b = new base(); b.test(); base d = new derive();//将d声明为base对象 d.test(); console.readline();
输出结果为:
可以看出,b和d实例的test方法实现的行为都是位于基类的!!!这表明了,派生类不能覆写基类中实现接口的成员(非虚方法)
但是,请看下面调用:
base b = new base(); b.test(); derive d = new derive(); //将d声明为derive对象 d.test(); console.readline();
输出结果为:
因此,如果想要继承的对象调用接口实现方法,只能声明为derive实例。这样做不符合effective c#中变量都声明为基实例的原则!!!
派生类方法个性,将基类方法转为虚方法避免这种使用上的混淆,如果确实派生类实现方法是个性行为,那么需要将基类的实现接口的方法前加virtual修饰符!
代码修改如下:
public class base:itest { public base() { console.writeline("this is base constructor"); } public virtual void test() //实现itest接口的虚方法 { console.writeline("this is in base to itest implemnt"); } } public class derive :base,itest { public derive() { console.writeline("this is derived constructor"); } public override void test() //实现接口itest的复写方法 { console.writeline("this is in derive to itest implemnt"); } }
一次实现,多个关联对象使用观察上面的代码,我们发现,在基类中实现的接口,如果派生类也想实现此接口,那么它默认继承了基类的接口实现,所以不用重复写代码实现接口。
public interface itest { void test(); } public class base:itest { public base() { console.writeline("this is base constructor"); } public void test() { console.writeline("this is in base to itest implemnt"); } } public class derive :base,itest { public derive() { console.writeline("this is derived constructor"); } }
总结:
1、 派生不能覆写接口的非虚成员;
2、如果派生类方法是个性方法,将基类方法转为虚方法;
3、若基类实现了接口方法,将派生类也显示地继承此接口,但是不用再次实现了!!!
以上就是c#设计模式-派生类实现非虚接口陷阱的实例代码分享的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product