質問

を持っています 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 アクセス可能です。私はそれが些細な問題であることを知っていますが、私はここで障害にぶつかりました。

役に立ちましたか?

解決

Employee 知りません specialField, 、 それだけ OtherEmployee します。使用するには適切なクラスにキャストする必要があります specialField.

Employee otherEmployee = new OtherEmployee();

これはあなたに与えません OtherEmployee しかし、 Employee. 。使用できるように specialField このようなことをする:

(otherEmployee as OtherEmployee).specialField = yourValue;

他のヒント

アクセスできません specialField オブジェクトは基本クラスの参照で作成されるためです。チャイルドクラスのプロパティにはアクセスできません。

オブジェクトは子供クラスにインスタンス化されていますが、参照はまだ基本クラスを指しています。したがって、プロパティ/スケルトンは基本クラスであり、子のクラス構造にメモリが割り当てられていません。

このようにして、従業員タイプとして他の従業員変数をdaeclareするために書く必要があるため、特別な分野についてはわかりません。そう:

(otherEmployee as OtherEmployee).specialField = "somevalue";
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top