首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不带访问权限的UpCasted字段

不带访问权限的UpCasted字段
EN

Stack Overflow用户
提问于 2017-07-22 19:40:33
回答 2查看 33关注 0票数 0

如何访问UpCasted对象中的字段?我无法使用Console.WriteLine打印Guy对象的SuperPower属性

代码语言:javascript
复制
namespace Test
{
    class Guy
    {
        public int Power { get; set; }
    }

    class BigGuy : Guy
    {
        public int SuperPower { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Guy guy = new Guy();
            BigGuy bigGuy = new BigGuy();
            bigGuy.SuperPower = 4;
            guy = bigGuy;
            Console.WriteLine(guy.SuperPower); // Visual studio doesn't accept this line.
        }
    }
}

当我调试时,我得到一个错误:

代码语言:javascript
复制
'Guy' does not contain a definition for 'SuperPower' 

为什么无法访问guy.SuperPower字段?

EN

回答 2

Stack Overflow用户

发布于 2017-07-22 19:43:37

在访问BigGuy类的字段之前,必须将guy转换为BigGuy

代码语言:javascript
复制
Console.WriteLine(((BigGuy)guy).SuperPower);
票数 0
EN

Stack Overflow用户

发布于 2017-07-22 19:45:28

因为变量的类型是Guy。这意味着您只能访问在Guy类型上声明的属性。

想象一下,如果你有第二个子类:

代码语言:javascript
复制
class FastGuy : Guy
{
    public int SpeedPower { get; set; }
}

guy = bigGuy;
guy = new FastGuy();

您能够访问的属性将根据您所赋值的不同而变化。这意味着它不能在编译时进行类型检查。

通常,将一个类型声明为某个不太具体的类型的意义在于,即使具体类型可能是一个子类,您也可以对该对象执行操作,就好像它就是该类型一样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45254117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档