C# 多态和接口

1多态可以有属性,接口只有方法

2关键字不同,多态有静态多态(abstract)和动态多态(virtual),静态多态不能new()出自己,动态多态可以;多态中可以有自己的方法可设置不需要子类重写,接口则否,

3.基于上述两点发现,多态比接口更宽松,但有时由于接口的单一使得很使用明确,别人用起来很方便.多态显得太庞大.

根本不需要查看源代码是如何实现的,这就是多态的好处.

 

可以看 https://www.cnblogs.com/wl-blog/p/10361894.html 讲的什么时候用接口

我要问一个问题,喜鹊和老鹰都可以飞,这个飞的能力,我怎么来实现呢?

XXX答:“在父类Bird中添加一个Fly方法不就好了~~”

我再问:“好的,照你说的,企鹅继承父类Bird,但是不能企鹅不能飞啊,这样在父类Bird中添加Fly方法是不是不合适呢?”

XXX答:“那就在能飞的鸟类中分别添加Fly方法不就可以了吗?”

对,这样是可以,功能完全可以实现,可是这样违背了面向对象开放封闭原则,下次我要再扩展一个鸟类比如猫头鹰(Owl),我还要去源代码中看下Fly是怎么实现的,然后在Owl中再次添加Fly方法,相同的功能,重复的代码,这样是不合理的,程序也不便于扩展;

其次,如果我还要添加一个飞机类(Plane),我继承Bird父类,合适吗?

很显然,不合适!所以我们需要一种规则,那就是接口了,喜鹊,老鹰,飞机,我都实现这个接口,那就可以飞了,而企鹅我不实现这个接口,它就不能飞~~

好,接下来介绍一下接口如何实现多态~

 

转载于:https://www.cnblogs.com/wl-blog/p/10370430.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
(1)创建C# 控制台应用程序L4_4。 (2)新建一个表示太阳的类Sun,在其中定义一个事件OnRise,一个成员方法Rise,并在方法中引发。参考源代码如下 (太阳只有一个,所以将其定义为静态类,静态类中只能定义静态成员) : public static class Sun { public static event EventHandler OnRise; //定义了一个事件成员OnRise public static void Rise() //引发事件的函数成员 { Console.WriteLine("太阳从东方升起..."); if (OnRise != null) OnRise(null, null); //引发事件OnRise } } (3)在程序中新建一个公鸡类Cock,在其中定义:  私有字段_name;  针对Sun.OnRise事件的处理方法Sun_OnRise;  事件OnSing;  引发事件OnSing的方法Sing。  构造函数,初始化私有字段_name,并将事件处理方法与事件进行关联。 参考源代码如下: public class Cock { private string _name; //私有字段,用于存放Cock实例的名称 public Cock(string name) //构造函数,初始化字段,并将事件关联至处理方法 { _name = name; Sun.OnRise += new EventHandler(Sun_OnRise); } //定义Sun.OnRise事件的处理方法 private void Sun_OnRise(object sender, EventArgs e) { Console.WriteLine("公鸡{0}:", _name); Console.WriteLine("雄鸡一声天下白!"); this.Sing(); //调用Sing方法以引发自身的事件OnSing } public event EventHandler OnSing; //Cock类的事件成员 public void Sing() //引发OnSing事件的方法 { Console.WriteLine("喔喔喔..."); if (OnSing != null) OnSing(this, null); } } (4)在程序中新建一个主人类Host,在其中同样定义:  私有字段_name;  起床事件OnGetup;  起床方法Getup(引发起床事件的成员);  养鸡方法Foster,在该方法中将事件OnSing与事件处理方法c1_OnSing相关联;  Cock.OnSing事件的处理方法c1_OnSing。 参考源代码如下:(c1_OnSing方法中调用Getup方法,表示公鸡打鸣会使主人起床) public class Host { private string _name; public Host(string name) { _name = name; } public event EventHandler OnGetup; //Host类的事件成员 public void Getup() { Console.WriteLine("日出而作..."); if (OnGetup != null) OnGetup(this, null); } public void Foster(Cock c1) { c1.OnSing += new EventHandler(c1_OnSing); } private void c1_OnSing(object sender, EventArgs e) { Console.Wri

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值