zoukankan      html  css  js  c++  java
  • 《C#从现象到本质》读书笔记(四)第4章C#和面向对象

    《C#从现象到本质》读书笔记第4章C#和面向对象

    面向对象程序设计OOP

    面向对象的三大特性是:

    1)封装:类可以将它的成员私有化,只暴露它认为应当暴露给外界的成员。通过私有化成员,外界不必了解这些成员的实现细节。

    2)继承:子类可以继承父类,从而简单地自动实现父类所有的成员,并增加自己的成员。通过方法的重写和隐藏,子类还可以修改父类的行为。

    3)多态:实际上是继承的一种特殊情况,此时,子类一定会复写父类的行为(通常父类没有提供代码)。接口和抽象类都是多态的体现。

    通过继承和多态,增强代码的复用功能。通过封装避免不合理的访问。

    在创建子类对象时,子类的方法表包括了父类的虚方法和指向父类方法表的指针,使得子类可以调用父类的方法。另外,如果存在方法的重写,则会用子类的方法替代掉父类的方法。

    子类型可以使用override显式地重写该方法,或者使用new隐藏该方法。

     1 class Program
     2 {
     3     static void Main(string[] args)
     4     {
     5         A a=new A();
     6         a.NormalMethod();//A.NormalMethod
     7         a.NewMethod();//A.NewMethod
     8 
     9         B b=new B();
    10         b.NormalMethod();//B.NormalMethod"
    11         b.NewMethod();//B.NewMethod
    12 
    13         A a2=new B();
    14         a2.NormalMethod();//B.NormalMethod"
    15         a2.NewMethod();//A.NewMethod
    16         Console.ReadKey();
    17         }
    18 }
    19 
    20 internal class A
    21 {
    22     public virtual void NormalMethod()
    23     {
    24         Console.WriteLine("A.NormalMethod");
    25     }
    26     public virtual void NewMethod()
    27     {
    28         Console.WriteLine("A.NewMethod");
    29     }
    30 }
    31 
    32 class B:A
    33 {
    34     public override void NormalMethod()
    35     {
    36         Console.WriteLine("B.NormalMethod");
    37     }
    38     public new void NewMethod()
    39     {
    40         Console.WriteLine("B.NewMethod");
    41     }
    42 }

    抽象类(abstract修饰类或者方法)不能建立实例;不能密封抽象类因为这违反了它只有被继承才有意义的原则;抽象类只有被派生类继承才有意义;抽象方法必须放置在抽象类中。抽象类可以拥有非抽象方法,而接口作为一个特殊的抽象类,不能含有非抽象的方法。

    抽象类和接口有一些区别,接口是一种特殊的抽象类:

    1)接口不能有非抽象方法,而抽象类可以有非抽象方法。

    2)接口和抽象类都不能被实例化。

    3)如果继承接口,必须实现接口所有的抽象方法。而继承抽象类的类可以只实现一部分父类的抽象方法。

    4)一个类可以继承多个接口,但只能继承自一个别的类。

    5)不能密封抽象类和接口。因为这破坏了接口和抽象类本身的性质,即被人继承。

    抽象类和它的子类之间应该是一般和特殊的关系,而接口仅仅是它的子类应该实现的一组规则。

    面向对象编程五大规则SOLID

    1)单一职责原则:有且仅有一个原因引起类的变更。低耦合,高内聚。SPR。

    2)开闭原则:软件实体应当对修改关闭,对扩展开放。对抽象编程,因为抽象相对稳定。OCP。工厂方法模式。

    3)里式替换原则:所有引用积累的地方必须能够透明地使用其子类的对象。子类必须能够替换其基类。LSP。

    4)接口隔离原则:尽量应用专门的接口,而不是单一的总接口,接口应该面向用户,将依赖建立在最小的接口上。客户端不应该依赖它不需要的原则。ISP。

    5)依赖倒置原则:依赖于抽象,而不要依赖于具体,因为抽象相对稳定。高层模块不应该依赖底层模块,两者都应该依赖其抽象,抽象不应该依赖于细节,细节应该依赖抽象。DIP。

  • 相关阅读:
    特征工程-相关性检验
    模型评价指标
    数据预批处理-独热编码
    数据预处理-处理分类型特征:编码(LabelEncoder、OrdinalEncoder-字符型变量数值化
    特征工程
    逻辑回归-建模后-多重共线性
    toFixed —— 将数值四舍五入为指定小数位数的数字
    js获取url参数值
    mddir——自动生成文件目录结构
    vuex——模块化
  • 原文地址:https://www.cnblogs.com/Lvkang/p/9692779.html
Copyright © 2011-2022 走看看