• 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 父类

    和构造函数正好相反!

  • 相关阅读:
    C Socket编程之Connect超时 (转)
    【c#】设置Socket连接、接收超时(转)
    socket测试远程地址能否连接并为连接设置超时(转)
    ZedGraph右键菜单怎样禁止它弹出(转)
    赚钱本身就是人生目的
    如果一个女人喜欢你,又不跟你在一起,而且只跟你很暧昧,那代表什么
    LayoutInflater的使用
    Android应用程序的生命周期
    Android的系统服务一览
    Android系统服务-简介
  • 原文地址:https://www.cnblogs.com/T-ARF/p/9207424.html
Copyright © 2020-2023  润新知