再次温故--装饰模式
今天学习python的时候遇到装饰器,文章说跟装饰模式差不多,想到之前看过的装饰模式,现在已经淡然忘却,重拾记忆,搜索装饰模式,自己有C#语法的基础也就找到一篇用C#语法写的,自己之前看到一个孙悟空的例子,结合这次,自己编写一遍.
namespace ProTest { abstract class 齐天大圣 { public abstract void 变(); } class 孙悟空: 齐天大圣 { public override void 变() { Console.WriteLine("我要变身了"); } } class 七十二变 : 齐天大圣 { protected 齐天大圣 大圣; public void 设置(齐天大圣 齐天) { 大圣 = 齐天; } public override void 变() { if (大圣 != null) { 大圣.变(); } } } class 鱼 : 七十二变 { public override void 变() { base.变(); Console.WriteLine("会游泳了."); } } class 鸟 : 七十二变 { public override void 变() { base.变(); Console.WriteLine("会飞了."); } } class Program { static void Main(string[] args) { 孙悟空 猴子 = new 孙悟空(); 鱼 小鱼 = new 鱼(); 鸟 小鸟 = new 鸟(); 小鱼.设置(猴子); 小鸟.设置(小鱼); 小鸟.变(); Console.Read(); } } }
结果:
我突如其来的想法,C#支持中文就使用了中文命名.只是为了理解设计模式..
在这里如果不太理解override的话,对这段代码也就理解的不够深刻.
如果感觉已经理解,那么请问鱼类和鸟类去掉override,将会输出什么?
只会输出.
写这一段代码的时候,很顺利写下来.最后运行的时候,结果不对,才发现没有加override,赤裸裸的说明自己基础没有夯实.
于是想到了之前看过的问题,自己测试了一下也就明白了override了:
如果理解这四张图输出结果.那就理解了override了.自己动手测试一下吧..
如果自己对new关键字理解不太清楚,也可以结合这4张图理解一下new关键隐藏基类含义.