新しい.NET Framework 4.5でリフレクションを使用して再生すると、予期しない動作が発生しました。名前空間System.Reflectionは、Typeオブジェクトを利用するためのいくつかの新しい拡張メソッドを提供します。そのうちの2つはGetRuntimeProperty(文字列名)とGetRuntimeProperties()です。Reflection:GetRuntimePropertyメソッドのフレームワークの動作が一貫していません
ここで、内部プロパティを持つ単純なオブジェクトがあるとします。
public class ObjectBase
{
protected int Id { get; set; }
public string Name { get; set; }
}
このタイプを悪用しようとしました。
var properties = typeof(ObjectBase).GetRuntimeProperties();
// properties.Count = 2
var idProperty = typeof(ObjectBase).GetRuntimeProperty("Id");
var nameProperty = typeof(ObjectBase).GetRuntimeProperty("Name");
// idProperty = null
// nameProperty = System.String Name
予想通りproperties
オブジェクトはidとnameプロパティdefintionsための2つのプロパティ定義を保持し、namePropertyは、Nameプロパティの定義を保持しています。期待していなかったのは、idProperty
オブジェクトがヌルであることでした。
.NET Frameworkから来ていますが、これはMicrosoftの設計者が意図したものだと思いますが、実際には起こりそうにないと思わなければなりません。私はそのような同様のメソッドが同じように動作する必要がありますが、GetRuntimePropertiesがフィルタを適用しないパブリックプロパティに対してGetRuntimePropertyフィルタを適用しているようです。
マイクロソフトでは、なぜこれらの類似のメソッドが異なる動作を持つべきであると判断したのかについて、合理的な説明をしていますか?設計ミス?
ありがとうございました。
これは、ストアアプリでのみ使用する必要があります。あなたが見ているものは妥協です、IInspectableはまさに豊かなインターフェースではありません。 –
彼らは完全に新しいリフレクションAPIを立ち上げました。それは私がどこから始めるべきかわからない、いろいろな意味での混乱です。 –