一个Public的字段引起的,谈谈继承中的new
一直觉得对c#面向对象这块已经掌握的很好了,因为正常情况下字段一般我们设计成私有的,今天突然想到一个实验,如下有两个很简单的类:
public class Farther
{
public int a = ;
public virtual int A
{
get
{
return a;
}
}
} public class Son : Farther
{
public new int a = ;
public override int A
{
get
{
return a;
}
}
}
注意字段是public的
那么对于下面的输出你能写出正确答案吗?
Son obj = new Son();
var obja = obj as Farther;
Farther objb = obj;
var objc = (Farther)obj; Console.WriteLine(obj.a);
Console.WriteLine(obja.a);
Console.WriteLine(objb.a);
Console.WriteLine(objc.a); Console.WriteLine(obj.A);
Console.WriteLine(obja.A);
Console.WriteLine(objb.A);
Console.WriteLine(objc.A); Console.ReadKey();
如果我将Son中的override注释掉那答案是什么?
public class Son : Farther
{
public new int a = ;
//public override int A
//{
// get
// {
// return a;
// }
//}
}
下面贴答案
未注释:
已注释:
结论:无论是字段或是方法或是属性,加上new 都会在显示的通过父类访问时表现为父类的特征,这里方法和属性我们很常用,但是字段我们可以认为默认是sealed的,即使在子类中不加new也是new一个新的(会弹出一个警告),所以微软在设计的时候是非常统一的。在这里也回应有些人认为在继承中父类的字段会完全被覆盖而消失掉的问题。
本文来自博#客#园
一个Public的字段引起的,谈谈继承中的new的更多相关文章
- 一个java源文件中为什么只能有一个public类。
我们都遇到过一个源文件中有多个java类,但当第一个类使用public修饰时,如果下面还有类使用public修饰,会报错.也就是是说一个java源文件最多只能有一个public类. 当有一个publi ...
- 第7章 一个java源文件中只能有一个public类
一个Java源文件中最多只能有一个public类, 1)当有一个public类时,源文件名必须与之一致,否则无法编译, 2)如果源文件中没有一个public类,则文件名与类中没有一致性要求. 至于ma ...
- 浅谈为什么一个java源文件中只能有一个public类?
声明,本篇文章为转载 转载 http://blog.csdn.net/bareheadzzq/article/details/6562211 最近在一个java文件中实现了几个类,其中一个声明为pub ...
- C# 类继承中的私有字段都去了哪里?
最近在看 C++ 类继承中的字段内存布局,我就很好奇 C# 中的继承链那些 private 字段都哪里去了? 在内存中是如何布局的,毕竟在子类中是无法访问的. 一:举例说明 为了方便讲述,先上一个例子 ...
- 谈谈java中静态变量与静态方法在有继承关系的两个类中调用
谈谈java中静态变量与静态方法在有继承关系的两个类中调用 学习的中如果遇到不明白或者不清楚的的时候,就是自己做些测试,自己去试试,这次我就做一个关于静态变量和静态方法在有继承关系的两个类中的问题测试 ...
- 谈谈java中成员变量与成员方法继承的问题
谈谈java中成员变量与成员方法继承的问题 关于成员变量和成员方法的的继承问题,我也可以做一个小测试,来看看结果. 首先我们先创建一个父类:
- 谈谈c++中继承中的虚函数
c++继承中的虚函数 c++是一种面向对象的编程语言的一个很明显的体现就是对继承机制的支持,c++中继承分很多种,按不同的分类有不同分类方法,比如可以按照基类的个数分为多继承和单继承,可以按照访问 ...
- 谈谈javascript中的prototype与继承
谈谈javascript中的prototype与继承 今天想谈谈javascript中的prototype. 通常来说,javascript中的对象就是一个指向prototype的指针和一个自身的属性 ...
- TypeLoadException: 未能从程序集“ECS.GUI.Define, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”中加载类型“ECS.GUI.Define.ArmgAimPos”,因为它在 4 偏移位置处包含一个对象字段,该字段已由一个非对象字段不正确地对齐或重叠
TypeLoadException: 未能从程序集"ECS.GUI.Define, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null ...
随机推荐
- bzoj3489 A simple rmq problem 可持久化树套树
先预处理出两个个数组pre,next.pre[i]表示上一个与i位置数字相同的位置,若不存在则设为0:next[i]表示下一个与i位置数字相同的位置,若不存在则设为n+1.那么一个满足在区间[L,R] ...
- Mysql索引总结(二)
在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytable表: ) NOT NULL ); 在查找username="admin"的记录 SELECT * ...
- 下拉框分组显示optgroup
<select> <optgroup label="语言"> <option>中文</option> <option>英 ...
- viewpager+fragment+HorizontalScrollView
xml布局 <RelativeLayout android:id="@+id/rl_column" android:layout_width=&q ...
- C语言资源
0.C自带库/函数在线文档 http://www.acm.uiuc.edu/webmonkeys/book/c_guide/ 1.so文件制作和使用 http://blog.csdn.net/love ...
- ch2-4:遇到嵌套列表进行缩进打印
1.增加一个参数来控制缩进打印:level '''这是一个模块,可以打印列表,其中可能包含嵌套列表''' def print_list(the_list,level): ""&qu ...
- is_user_logged_in()
function is_user_logged_in() { $user = wp_get_current_user(); return $user->exists(); } wp_get_cu ...
- CSS修改方法
1.在IE中,大部分情况下默认margin = 0px padding = 0px,但在Chrome中需要写明 在css.css文件开头加上(要加在最上面) html,body,ul,ol,li,ta ...
- SQL Server系统表sysobjects介绍与使用
关于SQL Server数据库的一切信息都保存在它的系统表格里.我怀疑你是否花过比较多的时间来检查系统表格,因为你总是忙于用户表格.但是,你可能需要偶尔做一点不同寻常的事,例如数据库所有的触发器.你可 ...
- ALTFP_CONVERT IP使用与仿真
ALTFP_CONVERT IP使用与仿真 近期项目要使用到整型数据转浮点型数据,将16位的整数转换为单精度浮点数(32bit).本打算自己写逻辑实现的,不过考虑到本身项目时间紧,能力也有限,就没 ...