abstract class Parent
{
protected string attrParent;
public AttrParent { get; protected set }
public Parent(string sParent)
{
AttrParent = sParent;
}
}
class Child : Parent
{
private string attrChild;
public AttrChild { get; private set }
public Child(string sParent, string sChild) : base(sParent)
{
AttrChild = sChild;
}
}
class Program
{
static void Main(string[] args)
{
Parent p = new Child();
p.AttrChild = "hello";
}
}
运行此程序时,出现以下错误:
'Example.Parent'不包含'AttrChild'的定义,也没有扩展方法'AttrChild'接受类型'Example.Parent'的第一个参数“
有人可以解释为什么会这样吗?
答案 0 :(得分:2)
当您将Child
个实例分配给键入Parent
的变量时,您只能访问Parent
上声明的成员。
您必须将其转发回Child
才能访问Child
- 仅限会员:
Parent p = new Child();
Child c = (Child)p;
c.AttrChild = "hello";
该转换可能在运行时失败,因为可能有一个不同的类继承Parent
。
答案 1 :(得分:0)
parent
实例只能访问parent
类中可用的方法。如果要访问创建child
类所需的child
方法。如果您尝试从child
类访问parent
方法,则会出现问题。
如果您希望调用child
类中的方法,则需要继承,您需要创建child
类的新实例。 parent
可以包含多个child
类的目的,如果您的示例中的代码有效,那么当parent
有多个child
类时会导致问题