0

次のクラス構造が与えられます。

public class A{
  [MyAttribute1]
  public string field;
}
public class B : A{
  [MyAttribute2]
  [MyAttribute3]
  public string field;
}

リフレクションにより、フィールドに属性「MyAttribute2」があるかどうかを調べようとしています。しかし、次の出力が得られます。

foreach (FieldInfo field in TypeOfB.GetFields(BindingFlags.Public | BindingFlags.Instance))
{
  Console.Write(field.DeclaringType);
  Console.Write(" : ");
  Console.Write(field.GetCustomAttributes(false).Length);
  Console.Write("\n");
}

//Output:
A.field : 1
B.field : 2

予想される出力は次のとおりです。

B.field : 3

今質問です。「フィールド」が2回取得され、結合されない理由を説明できる人はいますか? そして何よりも、私がどのようにそれを正しく行っているかを誰が教えてくれますか?

4

2 に答える 2

1

気をつけて。このフィールドは、基本クラス フィールドをオーバーライドするものではありません。新しいものを追加しています。そのため、両方のフィールドがリフレクションによって検出されていることがわかります。

于 2013-07-16T19:58:05.093 に答える