深入.net(多态一)

代码优化技术:

        当您在 编写一个类时,如果您发现你需要编写的“属性”和“方法”曾经在已有的类中实现,则,您可以将其共用的“属性”和“方法”剪切到一个新的“类”中,然后,让两个类共同继承这个“新类”。(使用 :,体现继承关系)

       此时,被继承类我们称为“父类”(基类),继承父类的类,我们称为“子类”(派生类)。所有的子类拥有父类所有对外公开的属性和方法,同时可以使用父类protected的资源。因此,我们完全可以说:“子类完全可以替换父类” ----- 里氏替换原则!

 

当一个子类“替换”父类时:

          1、只能看到父类的“方法列表”,而无法看到和使用子类自己的“新方法”

           2、如果要使用其替换子类的“新方法”:

                          步骤一:先识别  ( is )  if (item is Teacher){}

                          步骤二:再转换

                                     类型强行转换 ----(Teacher)item

                                     as 进行转换  ---item as Student

                                     ---- 两种转换方式的区别:类型强制转换,如果转换失败,抛出异常!

而使用  as 进行类型转换,转换失败,不会抛出异常,转换结果为NULL。

         3、当子类与父类,同时拥有“同签名的方法”(方法名相同、参数列表相同、返回类型相同)有如下几种情况:

 父类

子类

表现出的结果

方法无改变

方法前New(可省略)

执行父类的方法

virtual 修饰方法

方法前New(可省略)

执行父类的方法

virtual 修饰方法

override修饰方法

子类的方法

方法无改变

override修饰方法

编译错误(override必须成对出现)

  

         4、多态 ----- 相同的“方法调用”,却得到不同的“业务响应”;

                应用场景:当对象的创建代码经常发生改变时(新的子类不断出现,新的业务实现不断的出现),会导致关联业务(使用子类的地方)频繁发生变化!此时,您可以考虑将创建对象的代码,统一放置到一个类中(工厂类),这样有新的子类诞生时,只需要修改工厂类的“创建方法”【简单工厂设计模式】

                        

 

 

 

 

 

出发点:

        上一个项目写的代码,后续的项目要能继续使用; ---- 可复用【继承】

        项目做完后,要新功能时,最好只做少量改动,不影响原有功能; ---- 可扩展

        项目做完后,需求变化时,能快速修改,且少改动、还要稳定; ---- 可维护

原文地址:https://www.cnblogs.com/why168888/p/4283614.html