C#学习笔记4
1.C#只支持单一继承,若想要实现多重继承的效果。有2种方式:
第一种为传递继承,A为基类,B继承A,C继承B,通过传递来增迭要包含的元素,但这种继承的设计,在业务上具有明显的从属关系。
第二种为聚合,在关联关系中,如果定义了包容对象的一个核心组件,就会发生聚合。对于多重继承,这涉及挑选一个类作为主要基类(PdaItem),然后从中派生出个新类 (Contact),第二个希望的基类(Person)作为派生类(Contact)中的一个字段添加。接着字段 (Person) 上的所有非私有成员都在派生类(Contact) 上重新定义。然后,派生类 (Contact) 将调用委托给字段 (Person)。由于方法要重新声明,所以一些代码会重复,但是重复的代码不会根多,因为实际的方法主体只在聚合类 (Person)中实现。
2.不要在构造器中调用会影响所构造对象的任何虚方法,因为假如这个虚方法在当前要实例化的类型的派生类型中进行重写,就会调用重写的实现。但在继承层次结构中,基类正在构造而派生类还没构造。所以,调用虚方法将导致无法预测的行为。
3.new修饰符:new 关键字可以显式隐藏从基类继承的成员。隐藏继承的成员时,该成员的派生版本将替换基类版本。虽然可以在不使用 new 修饰符的情况下隐藏成员,但会生成警告。如果使用 new 显式隐藏成员,则会取消此警告,并记录要替换为派生版本这一事实。
4.sealed修饰符:除了可以修饰类(密封类,不能派生),virtual成员也可以密封,如A类有个虚方法Say(),B类继承后重写Say(),B类为了不让后面的派生类重写Say(),可以使用sealed修饰。
5.is运算符:不仅仅是检查数据是否能够转换到目标类型,且还会检查对象本身类型是否真的是目标类型。因此能够强制转换的对象,不一定是目标类型。如Thing类代码。
public class Thing
{
public static explicit operator string(Thing thing)
{
return thing.ToString();
} public override string ToString()
{
return "Thing";
} public static void Test()
{
string s = "text";
Thing t = new Thing();
object o = t;
Trace.Assert(!(t is string));
Trace.Assert((string)t == "Thing");
o = s;
Trace.Assert((string)o == "text");
Trace.Assert(o is string);
Console.WriteLine("Ok");
}
} public class PdaItem
{
public DateTime CreateTime { get; set; }
public DateTime ModifyTime { get; set; }
public string Name { get; set; }
protected string ObjectKey { get; set; }
} public class Contact : PdaItem
{
private Person internalPerson;//Person类的详细代码,在上一章已列出
public string Address { get; set; }
public string Phone { get; set; } public string FirstName
{
get { return internalPerson.FirstName; }
set { internalPerson.FirstName = value; }
} public string LastName
{
get { return internalPerson.LastName; }
set { internalPerson.LastName = value; }
}
}
---------------------以上内容根据《C#本质论 第三版》进行整理
C#学习笔记4的更多相关文章
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
- HTML学习笔记
HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...
- DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记
今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...
- ucos实时操作系统学习笔记——任务间通信(消息)
ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了qu ...
随机推荐
- 【bzoj4804】欧拉心算 莫比乌斯反演+莫比乌斯函数性质+线性筛
Description 给出一个数字N 求\(\sum_{i=1}^{n}\sum_{j=1}^{n}\varphi(gcd(i,j))\) Input 第一行为一个正整数T,表示数据组数. 接下来T ...
- 微信小程序HTTPS - cenos apache 下安装SSL证书
1.yum install mod_ssl 2.接下来,我们需要创建一个新目录,我们将存储服务器密钥和证书 mkdir /root/ssl 3.vi /etc/httpd/conf.d/ssl.con ...
- time、random以及序列化模块
一. time模块 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行“type( ...
- n阶行列式算法(c程序)
#include<stdio.h> #include<math.h> #define N 100 //N比输入的阶数大即可 int main() { int n,a[N][ ...
- 《Andrew Ng深度学习》笔记5
深层神经网络 深层神经网络的组成如图,这里主要是深层神经网络符号的定义. 为什么要用深层神经网络,有什么好处?这里主要是分层的思想.在软件工程中,如果问题遇到困难,一般是通过“加多”一层的方法来解决, ...
- Navicat Premium 12破解激活
下载Navicat Premium 12并安装: 蓝奏云下载:Navicat Premium 12注册机 链接:https://pan.baidu.com/s/1mN-urlh--SX1vbq7h ...
- HDU - 2604 矩阵快速幂 字符串递推 两种解法
记dp[i]为长度i且符合题意的方案数,dp[n]就是解 符合方案的是不含fmf和fff子串的字符串 考虑如何从前面几项递推出后面第i项 (★表示存在生成的非法方案)←其实没啥用处 i=1时 m③ f ...
- [转] 【译】让人倾倒的 11 个 npm trick
[From] https://segmentfault.com/a/1190000006804410 本文转载自:众成翻译译者:文蔺链接:http://www.zcfy.cc/article/1206 ...
- Oracle分析函数系列之first_value/last_value:在记录集中查找第一条记录和最后一条记录
[转自] http://blog.csdn.net/rfb0204421/article/details/7675911 注意:与max,min的区别,虽然也可以实现,但只是针对数字字段. 1.初始化 ...
- pycharm和webstorm永久激活方法
永久激活方法 准备工作 下载JetBrains产品(pycharm.webstorm),自行安装.链接地址:http://www.jetbrains.com/products.html 下载Crack ...