无法访问派生类中的公共属性

时间:2013-11-08 08:37:53

标签: c# inheritance abstract-class derived-class

我有一个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的所有属性均可访问。我知道这是一个微不足道的问题,但我在这里遇到了障碍......

3 个答案:

答案 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";