• C#成员的继承


    命名空间和类型具有“成员”。通常可以通过限定名来访问实体的成员。限定名以对实体的引用开头,后跟一个“.”标记,再接成员的名称。

    类型的成员或者是在该类型中声明的,或者是从该类型的基类“继承”的。当类型从基类继承时,基类的所有成员(实例构造函数、析构函数和静态构造函数除外)都成为派生类型的成员。基类中关于成员的可访问性的声明不能控制该成员是否可继承:继承性适用于任何成员,只要它们不是实例构造函数、静态构造函数或析构函数。然而,在派生类中可能不能访问已被继承的成员,原因或者是因为其已声明可访问性,或者是因为它已被类型本身中的声明所隐藏。

    派生类继承基类的所有成员(除构造函数和析构函数),new用来隐藏基类成员,override用来重写基类成员方法。然而隐藏和重写都不能改变一个事实:

    基类的所有成员(实例构造函数、析构函数和静态构造函数除外)在派生类中一个也不能少。

    例如:

    Fruit

    Private string name

    Protected string color

    Internal int amount

    Public int price

    Private void Fn01()

    (虚拟成员或抽象成员不能是私有的,所以不能用virtual关键字)

    Protected (virtual) void Fn02()

    Internal (virtual) void Fn03()

    Public (virtual) void Fn04()

    ================================

    Apple : Fruit

    Private string name

    派生类中不可见,可以声明一个同名字段(不用new关键字),两个字段各不相干。

    Protected string color

    派生类中可见,声明一个同名字段将隐藏它(最好用new)。如果不声明同名字段,那么this.color和base.color指的是同一个值。

    Internal int amount               

    派生类中可见,声明一个同名字段将隐藏它(最好用new)。如果不声明同名字段,那么this.amount和base.amount指的是同一个值。

    Public int price

    派生类中可见,声明一个同名字段将隐藏它(最好用new)。如果不声明同名字段,那么this.price和base.price指的是同一个值。

    Private void Fn01()

    虚拟成员或抽象成员不能是私

    有的,所以不能用virtual关键字

    派生类中不可见,可以声明一个同名方法(不用new关键字),两个方法各不相干。

    Protected (virtual) void Fn02()

    派生类中可见,new一个同名方法将隐藏它,override将重写它

    Internal (virtual) void Fn03()

    派生类中可见,new一个同名方法将隐藏它,override将重写它

    Public (virtual) void Fn04()

    派生类中可见,new一个同名方法将隐藏它,override将重写它

  • 相关阅读:
    HDU1325 Is It A Tree? (并查集判断有向图是否是树)
    DRF 视图家族及路由层补充
    DRF 外键字段深度查询优化、ListSerializer辅助完成群改
    DRF的orm多表关系补充及serializer子序列化
    DRF序列化
    DRF的封装:APIView类及五大模块
    DRF简介/接口概念
    vue-axios插件、django-cors插件、及vue如何使用第三方前端样式库:element/jQuery/bootstrap
    Vue项目的创建、路由、及生命周期钩子
    Vue框架-组件的概念及使用
  • 原文地址:https://www.cnblogs.com/netlyf/p/1627303.html
Copyright © 2020-2023  润新知