我有一个abstract class
,由另一个类继承如下:
public abstract class Employee
{
public string name{ get; set; }
public string age { get; set; }
}
public class OtherEmployee : Employee
{
public OtherEmployee()
{
}
public string specialField{ get; set; }
}
这就是我正在做的事情,不知怎的,没有完成它:
Employee otherEmployee= new OtherEmployee();
otherEmployee.specialField = "somevalue";
我无权访问specialField
,而Employee
的所有属性均可访问。我知道这是一个微不足道的问题,但我在这里遇到了障碍......
答案 0 :(得分:5)
Employee
不了解specialField
,只知道OtherEmployee
。您需要将其强制转换为正确的类才能使用specialField
。
Employee otherEmployee = new OtherEmployee();
这不会为您提供OtherEmployee
,而是Employee
。为了能够使用specialField
做这样的事情:
(otherEmployee as OtherEmployee).specialField = yourValue;
答案 1 :(得分:2)
您将无权访问specialField
,因为该对象是使用基类引用创建的。它将无法访问Child类属性。
虽然该对象是使用子类实例化的,但引用仍然指向基类。因此属性/骨架将是基类,并且不会为子类结构分配内存。
答案 2 :(得分:0)
您必须以这种方式编写,因为您将otheremployee变量声明为Employee Type,因此它不知道特殊字段。所以:
(otherEmployee as OtherEmployee).specialField = "somevalue";