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# 继承(2)的更多相关文章
- javaScript的原型继承与多态性
1.prototype 我们可以简单的把prototype看做是一个模版,新创建的自定义对象都是这个模版(prototype)的一个拷贝 (实际上不是拷贝而是链接,只不过这种链接是不可见,给人们的感觉 ...
- JavaScript的继承实现方式
1.使用call或apply方法,将父对象的构造函数绑定在子对象上 function A(){ this.name = 'json'; } function B(){ A.call(this); } ...
- javascript中的继承与深度拷贝
前言 本篇适合前端新人,下面开始...... 对于前端新手来说(比如博主),每当对js的对象做操作时,都是一种痛苦,原因就是在于对象的赋值是引用的传递,并非值的传递,虽然看上去后者赋值给了前者,他们就 ...
- 谈谈一些有趣的CSS题目(四)-- 从倒影说起,谈谈 CSS 继承 inherit
开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...
- JS继承类相关试题
题目一: //有关于原型继承的代码如下:function Person(name) { this.name = name;}Person.prototype = { getName : f ...
- JS继承之寄生类继承
原型式继承 其原理就是借助原型,可以基于已有的对象创建新对象.节省了创建自定义类型这一步(虽然觉得这样没什么意义). 模型 function object(o){ function W(){ } W. ...
- JS继承之借用构造函数继承和组合继承
根据少一点套路,多一点真诚这个原则,继续学习. 借用构造函数继承 在解决原型中包含引用类型值所带来问题的过程中,开发人员开始使用一种叫做借用构造函数(constructor stealing)的技术( ...
- JS继承之原型继承
许多OO语言都支持两种继承方式:接口继承和实现继承.接口继承只继承方法签名,而实现继承则继承实际的方法.如前所述,由于函数没有签名,在ECMAScript中无法实现接口继承.ECMAScript只支 ...
- 深入浅出JavaScript之原型链&继承
Javascript语言的继承机制,它没有"子类"和"父类"的概念,也没有"类"(class)和"实例"(instanc ...
- 如果你也会C#,那不妨了解下F#(7):面向对象编程之继承、接口和泛型
前言 面向对象三大基本特性:封装.继承.多态.上一篇中介绍了类的定义,下面就了解下F#中继承和多态的使用吧.
随机推荐
- sublime text3 FTP直接上传
- Models-详细操作
# 单表简单查询13种方法 1.all(): 查询所有结果 all: models.表名.objects.all() book_all=models.Book.objects.all() # 结果是q ...
- MariaDB 脚本
研究MariaDB, 需要mock up一些假数据: 生成n个长度整型数的函数rand_num: CREATE DEFINER=`root`@`localhost` FUNCTION `rand_nu ...
- [置顶]
sscanf() - 从一个字符串中读进与指定格式相符的数据
在做一道九度上机题时,突然发现sscanf()函数非常有用,就顺便从网上搜集资料整理一下. sscanf() 的作用:从一个字符串中读进与指定格式相符的数据. 原型: int sscanf (cons ...
- temp4
- 【原】Zookeeper 概述 + 官网 Overview 翻译
分布式应用 分布式应用 distributed application可以在给定时间(同时)在网络中的多个系统上运行,通过协调它们以快速有效的方式完成特定任务. (a), (b): a distrib ...
- Git的配置和使用帮助
Git的配置和使用帮助 1.Git的配置 ============== Git有三个地方可以存放配置:系统级配置文件/etc/gitconfig.用户级配置文件~/.gitconfig和仓库级配置文件 ...
- Timer定时函数的用法
- JAVA基础知识总结17(网络编程)
端口: 物理端口:IP地址 逻辑端口:用于标识进程的逻辑地址,不同进程的标识:有效端口:0~65535,其中0~1024系统使用或保留端口. JAVA中ip对象:InetAddress. import ...
- python中descriptor的应用
[python中descriptor的应用] 1.classmethod. 1)classmethod的应用. 2)classmethod原理. 2.staticmethod. 1)staticmet ...