繁体   English   中英

无法使用基类访问派生类字段

[英]Can not access derived class fields using base class

我无法从派生类访问简单字段,因此在字段的情况下使用多态是什么。 如果我必须向下转发到ResponseMBP以获取Name属性,那么我的客户端需要知道派生类。

那么多态性只适用于方法吗?

public abstract class Response
{
}

public class ResponseMbp : Response
{        
    public string Name = "My Name";        
}

class Program
{
    static void Main(string[] args)
    {
        Response r = new ResponseMbp();
        Console.Write(r.Name);
    }
}

您将变量定义为类型Response 此时,您只能访问Response类及其超类中包含的属性和变量。

当属性命名为name时,您还尝试引用Name

首先,对于字段多态性,您应该在基类和派生类中声明该字段(与方法多态性一样)。

现在在您的示例中,字段“name”只是派生类签名的一部分,并且您的基类的签名中没有“name”变量。 因此,基类的对象虽然使用派生类进行实例化,但只会显示基类签名项。 因此,由于这个原因,您无法在示例中使用r.name。

要了解字段多态性的正确用法,请参阅链接。

ResponseMbp继承自Response 因此ResponseMbp是一个Response ,但Response不是ResponseMbp

由于您在ResponseMbp中定义了属性Name ,因此Response不知道或不关心它。

如果在Response定义了Name ,则ResponseMbp将继承该属性,并且可以从任一类访问它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM