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

时间:2013-08-14 18:19:47

标签: c# oop inheritance polymorphism ooad

我无法从派生类访问简单字段 在字段的情况下使用多态。如果我必须向下转发到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);
    }
}

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

ResponseMbp继承自Response。因此ResponseMbpResponse,但Response不是ResponseMbp

由于您要在Name中定义属性ResponseMbpResponse不知道或关心它。

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

答案 2 :(得分:0)

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

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

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