0

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

3 回答 3

1

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

您还尝试Name在属性命名时引用name

于 2013-08-14T18:24:30.293 回答
1

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

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

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

于 2013-08-14T19:04:15.747 回答
0

ResponseMbp继承自Response. ResponseMbpa也是如此Response,但 aResponse不是 a ResponseMbp

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

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

于 2013-08-14T19:00:36.327 回答