4

タイプを知っているだけで取得したいオブジェクトへのシングルトンを含む静的プロパティにアクセスしようとしている状況があります。私は実装を持っていますが、面倒なようです...

public interface IFace
{
    void Start()
}

public class Container
{
    public IFace SelectedValue;
    public Type SelectedType;
    public void Start()
    {
        SelectedValue =  (IFace)SelectedType.
                         GetProperty("Instance", BindingFlags.Static | BindingFlags.Public).
                         GetGetMethod().Invoke(null,null);
        SelectedValue.Start();
    }
}

上記を行う他の方法はありますか?System.Type を使用して public static プロパティにアクセスしますか?

ありがとう

4

1 に答える 1

5

PropertyInfo.GetValue代わりに呼び出すことで、少し単純化できます。

SelectedValue = (IFace)SelectedType
   .GetProperty("Instance", BindingFlags.Static | BindingFlags.Public)
   .GetValue(null, null);

.NET 4.5 の時点でGetValue(null)、インデクサー パラメーターのパラメーターを持たないオーバーロードが追加されているため、呼び出すことができます (意味がわかれば)。

この時点では、リフレクションと同じくらい簡単です。David Arno がコメントで述べているように、代わりにデザインを再検討する必要があります。

于 2013-10-18T08:30:47.780 に答える