类的继承

 

 

 

 

 

继承的本质:继承的本质是派生类在基类已有的成员的基础之上对基类进行横向和者纵向上的扩展。

横向扩展:类成员在数量上的扩充

纵向扩展:某个或多个类成员版本的扩充

C# C++ 之类的静态语言添加的类成员在继承中不能删除,但是js和python之类的语言可以在删除类成员

 

构造器是不可以继承的:

并且基类构造器和派生类的构造器都被执行

class Program
{
    static void Main(string[] args)
    {
        //初始化类是,基类的构造器也会执行
        //先执行基类的构造器,然后执行派生类的构造器
        // Vehicle Car 的构造器都会被执行
        Car car = new Car();
        Console.WriteLine(car.Owner);
    }
}

class Vehicle
{
    public Vehicle()
    {
        this.Owner = "N/A";
    }
    public string Owner { get; set; }
}

class Car : Vehicle
{
    public Car()
    {
        this.Owner = "Car Owner";
    }
}

 

带参数的基类构造器:

如果基类构造器带有参数,在派生类中就要传递给基类构造器参数。
这说明基类的构造器并没有被派生类所继承,因为派生类需要自己声明构造器。

class Vehicle
{
    public Vehicle(string owner)
    {
        this.Owner = owner;
    }
    public string Owner { get; set; }
}

class Car : Vehicle
{
    //基类中构造器带参数可以使用base()给它传递参数
    public Car() : base("N/A")
    {
        this.Owner = "Car Owner";
    }
}

class Car : Vehicle
{
    //基类中构造器带参数
    //可以在派生类中创建带有同样参数的构造器
    //然后把参数传递给基类构造器
    public Car(string owner) : base(owner)
    {
        this.Owner = "Car Owner";
    }
}

 

类继承和类成员的访问级别:

(1):类成员的访问级别是以类的访问级别为上限的。

      如果类的访问级别是internal,对于别的Assembly中即使使用Public修饰类成员,别的Assembly也是无法访问这个类成员的。

(2):类成员使用internal修饰,只有在当前assembly才可以访问此类成员。

(3):private(类成员默认访问修饰符) 访问修饰符,限制成员只能在本类的类体中可以访问,子类可以继承,但是不能访问父类的private 修饰的成员。

 

    编程建议:private是默认修饰符,但是还是建议添加上,以使代码清晰整齐。_rpm  下划线 表示私有实例字段。

(3)protected:只有同一 class 或者从该 class 派生的 class 中的代码可以访问该类型或成员。

    (3.1)protected 常常修饰方法和重写关系紧密一些

       (3.2)  protected 是可以跨assembly的

    (3.3)protected 可以和 internal 连用

    

posted @ 2022-06-04 20:07  fiowehf  阅读(65)  评论(0)    收藏  举报