2016-06-27 9 views
-1

これはすでに回答がありましたが、私にとっては効果がありません。私は、(静的ではない)クラスの静的プロパティを基本クラスから、派生したインスタンスにアクセスしようとしています。基本クラスでreflectionを介して静的プロパティを取得します。

:ここ

Type type = this.GetType(); 
PropertyInfo propInf = type.GetProperty("DirectoryCode", BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy); 

propInfは(タイプが派生クラス型である)ヌルです。派生クラスで

public class DTGCSMissonParameters : ModelBase 
{ 
    public static ushort DirectoryCode = (ushort) DIR.MISSION_PARAMETERS; 

@JeroenVanLangenがコメントで指定されているように感謝

+3

あなたが定義したものは**フィールド**ではなく** Property **なので、プロパティ。 ** C#6.0の場合** _try: 'public static ushort DirectoryCode {get; } =(ushort)DIR.MISSION_PARAMETERS; '_ –

+0

@JeroenvanLangen答えとして書く。 Write: "GetProperty"の代わりに 'GetField'を使用します。 –

+0

私はBjarkeがすでに行ったことを見ます。だから私は彼をサポートします。 _(私は似たような答えを追加するのが好きではない)_ –

答えて

3

は、あなたの代わりにプロパティのフィールドを定義しました。正しい文は次のようになります。

// C# 6.0 
public static ushort DirectoryCode => (ushort) DIR.MISSION_PARAMETERS; 

// Pre-C# 6.0 
public static ushort DirectoryCode 
{ 
    get { return (ushort) DIR.MISSION_PARAMETERS; } 
} 

@Edit:ジャップスティグニールセンは、コメントで指摘したように、提案されたソリューションの最初のプロパティがアクセスされたたびに評価されます。これを避け、プロパティ自体の値をそのまま保持するには、次のようにします:

+2

または、フィールドをそのまま使用したい場合は、 'GetProperty'の代わりに' GetField'を使います。 –

+1

注:あなたの提案は、プロパティの 'get'アクセサが呼び出されるたびに' DIR.MISSION_PARAMETERS'を再評価します。それはフィールドがしたことではありません。 'DIR.MISSION_PARAMETERS'を一度だけ評価したい場合は早く(' DTGCSMissonParameters'の静的コンストラクタが実行された時点で) 'public static ushort DirectoryCode {get; } =(ushort)DIR.MISSION_PARAMETERS; '代わりに。 –

+0

ありがとう! VS2013をC#5で使用しているので、GetFieldを使用します。 VS2015を手に入れようとしますが、今は動作します。 – mikepa88

関連する問題