首页 新闻 会员 周边

c#中virtual 属性未在继生类中覆写会怎么执行

0
悬赏园豆:20 [已解决问题] 解决于 2014-10-12 22:26

请各位高手指导一下,本人做一道练习题遇到问题,代码如下:

using System;
class MyBase
{
    int myInt=10;
    virtual public void int  MyInt
    {
    get{return myInt;}
    }
}
class MyDerived:MyBase
{
    int myInt=20;
}
class Program
{
static void Main()
{
    var myT=new MyDerived();
    MyBase mybc=(MyBase)myT;
    Console.WriteLine(myT.MyInt);
    Console.WriteLine(mybc.MyInt);
}
}

 

谁能告诉我    Console.WriteLine(myT.MyInt);    这条语句的输出结果是什么,为什么?

书生soft的主页 书生soft | 初学一级 | 园豆:184
提问于:2014-10-11 21:12
< >
分享
最佳答案
0

virtual 不是要被复写才能执行的,只要继承了,子类都可以执行父类可见的方法和属性,只是说复写了,就执行复写的,父类的就不执行了

 

都是输出 10

收获园豆:20
Yu | 专家六级 |园豆:12980 | 2014-10-11 21:58

我知道会执行virtual属性,不然我也不会子类没有申明该属性,却在调用。问题是从父类继承了该属性后为什么没有输出子类的字段myInt=20,而是输出父类的字段。说具体点,为什么,这里面是什么机制原理主导的。

书生soft | 园豆:184 (初学一级) | 2014-10-11 22:25

@书生soft: myInt 是私有变量,不被子类继承

Yu | 园豆:12980 (专家六级) | 2014-10-11 22:32

@Yu: 你说得不对,私有变量也会被继承,只不过子类无权访问罢了,所以private字段似乎跟子类没啥关系。

书生soft | 园豆:184 (初学一级) | 2014-10-12 10:05

@书生soft: 继承本来意义就是要对基类可以进行重用,扩展和修改,如果对那些私有的不动产,拥有但不能用也算是继承,那也可以。对于输出10,是对同名字段,按离MyInt最近创建的顺序来访问的

Yu | 园豆:12980 (专家六级) | 2014-10-12 20:19

@Yu: 你说得好像很有道理,在哪能找到这块理论知识的书籍,补一补。

书生soft | 园豆:184 (初学一级) | 2014-10-12 21:48

@书生soft:介绍两本

你必须知道的.NET和CLR via C# 

Yu | 园豆:12980 (专家六级) | 2014-10-12 22:01

@Yu: 不知道写得怎么样,我一般都是看老外写的书,写的很深入透彻。国内的书都很浅,写得不地道。不过我只是菜鸟,目前正入门,正在看C#图解教程和C#入门经典第六版

书生soft | 园豆:184 (初学一级) | 2014-10-12 22:13

@书生soft: 上面那2本都挺不错了。前本包含各种中间语言,个人喜好后者。

Cherbim | 园豆:323 (菜鸟二级) | 2014-10-12 22:19

@书生soft: 电子中文版目前有第三版,第四版是英文。怎么说,从头到尾看一遍你对语言理解就更深了

Cherbim | 园豆:323 (菜鸟二级) | 2014-10-12 22:23

@Yu: 谢谢,分数给你了。

书生soft | 园豆:184 (初学一级) | 2014-10-12 22:24

@书生soft: 前者是国内的,后者是译著

对入门来说,较为深入,但又本质的东西

建议先入门,建立一定经验,再消化

对能阅读老外的外籍书籍,当然好事,他们都是比国内快几拍

Yu | 园豆:12980 (专家六级) | 2014-10-12 22:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册