• .NET 面向对象基础


    封装                                                                                              

         对象的内部数据不应该从对象的实例直接访问,如果调用者想改变对象的状态就要使用访问方法(getter)和修改方法(setter),封装提供了一种保护状态数据完整性的方法,可用于验证输入数据是否符合业务规则。
    • 实现方式
      • 访问方法和修改方法
      • 属性
      •  

    继承                                                                                             

         新的类可以从其他类中继承利用他们既有的功能。这是通过以下方式实现的:在声明类时,在类名称后放置一个冒号,然后在冒号后指定要从中继承的类(即基类)。
    • 语法
    public class A
    {
        public A() { }
    }
    
    public class B : A
    {
        public B() { }
    }
    
    • 代码重用
      • is-a:继承
      • has-a:包含、委托模型
    • 基类
         一个类只能有一个直接的基类,子类将继承基类的所有非私有功能,但可以继承多个接口,这样可以构造灵活的接口层次来建模复杂的行为。
      • 初始化调用
         默认在子类的构造函数执行之前调用基类的构造函数,之后为基类的公共属性创建状态。实现子类时最好是显示的调用合适的基类的构造函数,减少对继承的初始化成员的调用次数。
      • 关键字
        • base:子类需要调用基类的字段或方法时可以使用该关键字
    • 密封类
         密封类是不可以被继承的,在设计工具类时对类进行密封是很有意义的
      • 关键字
        • sealed
      • 代码示例
    public sealed class D
    {
        // Class members here.
    }
    
    • 嵌套类
         在类或结构内部定义的类型称为嵌套类型,不管外部类型是类还是结构,嵌套类型均默认为 private,但是可以设置为 public、protected internal、protected、internal 或 private。嵌套类型(或内部类型)可访问包含类型(或外部类型)。
      • 语法
    class Container
    {
        class Nested
        {
            Nested() { }
        }
    }
    
      • 访问包含类型
         将其作为构造函数传递给嵌套类型
    public class Container
    {
        public class Nested
        {
            private Container m_parent;
    
            public Nested()
            {
            }
            public Nested(Container parent)
            {
                m_parent = parent;
            }
        }
    }
    
      • 实例化
    Container.Nested nest = new Container.Nested();
    

    多态                                                                                             

         通过继承,一个类可以用作多种类型:可以用作它自己的类型、任何基类型,或者在实现接口时用作任何接口类型。这称为多态性。C# 中的每种类型都是多态的。类型可用作它们自己的类型或用作 Object 实例,因为任何类型都自动将 Object 当作基类型。
    • 方法重写
         由子类重新定义基类中的方法,可使用base关键字调用基类的方法
      • 关键字
        • virtual:基类中的需要子类实现的方法可以使用该关键字
        • override:派生类需要实现基类中的方法可以使用该关键字
    • 成员投影
          如果子类中定义了一个成员与基类的成员一致,则我们称之为成员投影。可以使用new关键字调用新成员而不是被替换的旧成员,将子类实例强制转换成基类实例时才可以调用隐藏的基类成员。一般在无法更改基类代码的情况下可以使用此方法进行成员替换。
      • 关键字
        • new
    • 密封虚成员
         用于密封从基类继承的虚方法,以防止本类的派生类重写此方法。
      • 关键字
        • sealed:使用 sealed 关键字可以防止继承以前标记为 virtual 的类或某些类成员。
      • 代码示例
    public class D : C
    {
        public sealed override void DoWork() { }
    }
    
    • 抽象类
         抽象类不能实例化,抽象类的用途是提供多个派生类可共享的基类的公共定义,可用于建模。
      • 关键字
        • abstract :使用 abstract 关键字可以创建仅用于继承用途的类和类成员,即定义派生的非抽象类的功能。
      • 抽象方法
         抽象类也可以定义抽象方法。方法是将关键字 abstract 添加到方法的返回类型的前面。抽象方法没有实现,所以方法定义后面是分号,而不是常规的方法块。抽象类的派生类必须实现所有抽象方法。当抽象类从基类继承虚方法时,抽象类可以使用抽象方法重写该虚方法。
      • 代码示例
    public abstract class A
    {
        public abstract void DoWork(int i);
    }
    
      • 虚方法声明为抽象
         如果将虚方法声明为抽象方法,则它对于从抽象类继承的所有类而言仍然是虚的。继承抽象方法的类无法访问该方法的原始实现。在前面的示例中,类 F 上的 DoWork 无法调用类 D 上的 DoWork。在此情况下,抽象类可以强制派生类为虚方法提供新的方法实现。
    // compile with: /target:librarypublic class D
    {
        public virtual void DoWork(int i)
        {
            // Original implementation.
        }
    }
    
    public abstract class E : D
    {
        public abstract override void DoWork(int i);
    }
    
    public class F : E
    {
        public override void DoWork(int i)
        {
            // New implementation.
        }
    }
    
    • 多态接口
         定义一个抽象类并定义许多抽象成员,这样派生类必须实现所有的抽象成员,也就强制了每一个后代具有的多态接口。     
    • 基类和派生类的转换规则
      • 规则一:可以使用基类保存任意的派生类型,并且这是安全的,这叫做隐式转换。
      • 规则二:反之,需要使用强制转换操作符进行显示的向下转换。
  • 相关阅读:
    Study Plan The Twelfth Day
    Study Plan The Fifteenth Day
    Study Plan The Seventeenth Day
    Study Plan The Tenth Day
    Study Plan The Eighth Day
    Study Plan The Eleventh Day
    Study Plan The Sixteenth Day
    Study Plan The Thirteenth Day
    Study Plan The Fourteenth Day
    Study Plan The Ninth Day
  • 原文地址:https://www.cnblogs.com/liusuqi/p/3139726.html
Copyright © 2020-2023  润新知