C# 继承(2)

接着上章:

代码如下-

复制代码
  class NameList
    {
        public string Name { get; set; }

        public void ID() => Console.WriteLine($"我的id是{Name}");
    }


    class A : NameList
    {

        public A() => Console.WriteLine("这是A类的初始化,也就是构造函数");

       
    }
    class B : NameList
    {

        public B() => Console.WriteLine("这是A类的初始化,也就是构造函数");
      
    }
复制代码

我们 来探讨一下 继承的类的使用

 

这个是A类的标准实例化方式。

           var a = new A
            {
                Name = "实例后,Name是新赋值"
            };
            a.ID();

 

结果:

 

A类的启动顺序没有问题。

1,构造函数,

2,赋值

3  ID方法

没一点问题。

但是! 我们来思考一下,在NameList中的方法和属性都是需要实例化才能使用的

 

继承之后实例化子类【派生类【AB两个类就是】】,怎么就能使用NameList呢?

 

 这一次我们探讨一下继承的时候,类的启动顺序。也是实例化顺序。

 

为了简单我们再次修改全体代码:

给NameList一个构造函数。

复制代码
   class NameList
    {
        public NameList() => Console.WriteLine("这个是NameList的构造函数");

        public string Name { get; set; }

        public void ID() => Console.WriteLine($"我的id是{Name}");
    }


    class A : NameList
    {

        public A() => Console.WriteLine("这是A类的初始化,也就是构造函数");

       
    }
    class B : NameList
    {

        public B() => Console.WriteLine("这是A类的初始化,也就是构造函数");
      
    }
复制代码

我们再次实例化A类 代码和上面的实例化A一模一样,就不再重复了

我们直接看结果:

 

原来如此,为什么不实例化NameList类,就能使用其中的属性和方法【明面不实例化】

我们知道了  继承的实例化顺序:

1 实例化父类

2 实例化子类

 

那么 我们再来探讨释放类的顺序吧。 我们再来改造一下 代码: 添加析构函数。

复制代码
 class NameList
    {
        public NameList() => Console.WriteLine("这个是NameList的构造函数");

        ~NameList() => Debug.WriteLine("释放NameList");

        public string Name { get; set; }

        public void ID() => Console.WriteLine($"我的id是{Name}");
    }


    class A : NameList
    {

        public A() => Console.WriteLine("这是A类的初始化,也就是构造函数");

        ~A() => Debug.WriteLine("释放A");
    }
    class B : NameList
    {

        public B() => Console.WriteLine("这是A类的初始化,也就是构造函数");

        ~B() => Debug.WriteLine("释放B");

    }
复制代码

还是实例化A,代码一样,直接看结果。

我们来看一下啊 先释放谁:

通过Debug类,我们可以看到析构函数的启动顺序,

1 子类

2 父类

和构造函数正好相反!

 

posted @   ARM830  阅读(227)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示