我无法从派生类访问简单字段 在字段的情况下使用多态。如果我必须向下转发到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);
}
}
答案 0 :(得分:1)
您将变量定义为Response
类型。此时,您只能访问Response
类及其超类中包含的属性和变量。
当您将该属性命名为Name
时,您还尝试引用name
。
答案 1 :(得分:0)
ResponseMbp
继承自Response
。因此ResponseMbp
是Response
,但Response
不是ResponseMbp
。
由于您要在Name
中定义属性ResponseMbp
,Response
不知道或关心它。
如果您在Name
中定义了Response
,ResponseMbp
将继承该属性,并且可以从任一类访问它。
答案 2 :(得分:0)
首先,对于字段多态,您应该在基类和派生类中声明该字段(与方法多态性一样)。
现在,在您的示例中,字段“name”只是派生类签名的一部分,并且您的基类签名中没有“name”变量。因此,基类的对象虽然使用派生类进行实例化,但只会显示基类签名项。 因此,由于这个原因,您无法在示例中使用r.name。
要了解字段多态性的正确用法,请参阅this link。