.net继承
来源:互联网 发布:淘宝主播排名榜在哪看 编辑:程序博客网 时间:2024/06/05 06:16
读了《你必须知道的.net》的关于继承的本质篇,有以下收获:
1.子类继承父类,那么在创建子对象(为子对象分配内存)的时候,会有以下几点要注意的
(1)如果子类存在"相同"的字段成员或函数成员,且函数不存在覆写(override),那么子
对象中将同时存在父类和子类的"相同"成员,只不过父类的成员被隐藏了.(这里的"相同"
是指:如果字段则类型相同,名字相同;如果函数则返回值类型相同,名字相同,参数相同)
要调用隐藏的成员必须要父类型的引用.
(2)创建子类型对象的过程,先创建字段,从最上层的父类开始,直到自身的字段,如果遇
相同的字段,则隐藏掉(隐藏并不代表不创建,只是调用它需要不同的权限,比如父类型指
针);成员函数的创建有所不同,子对象中保存一个指针,它指向另外一块保存了方法表的
内存块,如果函数被覆写(override),那么只有一个备份,如果是隐藏,则有多个备份,只不
过各个备份的访问权限不一样.
3.例子:
class Base
{
public string str = "baseString";
public string str2 = "baseString2";
public void function1()
{
Console.WriteLine("base function1");
}
public virtual void function2()
{
Console.WriteLine("base function2");
}
}
class Derived : Base
{
public new string str = "derivedString";
public new void function1()
{
Console.WriteLine("derived function1");
}
public override void function2()
{
Console.WriteLine("derived function2");
}
}
static void Main(string[] args)
{
Derived d = new Derived();
Base b = new Derived();
//验证字段被隐藏
Console.WriteLine("隐藏字段测试:");
Console.WriteLine(d.str);
Console.WriteLine(b.str);
Console.WriteLine();
//验证函数被隐藏
Console.WriteLine("隐藏函数测试:");
d.function1();
b.function1();
Console.WriteLine();
//验证函数被覆写
Console.WriteLine("函数覆写测试:");
d.function2();
b.function2();
}
结果如下:
隐藏字段测试:
derivedString
baseString
隐藏函数测试:
derived function1
base function1
覆写函数测试:
derived function2
base function2
- .net继承
- .NET继承本质论
- .net继承浅析
- .NET继承本质论
- .NET继承本质论
- .NET继承本质论
- Asp.net 页面 继承
- asp.net 继承身份验证
- 。net中继承
- Asp.net PageBase继承
- ASP.NET 页面继承
- .net继承实现身份验证
- vb.net 继承
- .Net 基础 之 继承
- Asp.net PageBase继承
- .NET基础--继承
- VB.NET窗体继承
- ASP.NET 页面继承
- 自动光学检查(AOI) 的核心——快速准确对目标进行定位配准
- 35岁之前成功12条法则收藏
- Google Chrome 键盘快捷键
- 汉诺塔问题(递归函数)
- (转)Eclipse
- .net继承
- 绿色版Mysql的安装配置
- sqlplus中方向键的使用
- Linux下命令行设置IP、网关和DNS
- Linux 下AT&T汇编语法格式简介02
- 算法题
- 如在梦里,关于c++2009新标准
- 面试官的考题大全
- java常用包