c# - 从 System.Type 获取静态属性的值

标签 c# system.reflection system.type

我有这样的情况,我试图访问一个静态属性,该属性包含一个对象的单例,我希望仅通过知道其类型来检索该对象。我有一个实现,但它看起来很麻烦......

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)静态属性?

谢谢

最佳答案

您可以通过调用 PropertyInfo.GetValue 稍微简化它相反:

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

从 .NET 4.5 开始,您可以调用 GetValue(null) 作为已添加的重载,它没有索引器参数的参数(如果您明白我的意思)。

此时它与反射一样简单。正如 David Arno 在评论中所说,您很可能应该重新审视设计。

关于c# - 从 System.Type 获取静态属性的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19444838/

相关文章:

c# - 从 C# 中的 Windows 窗体应用程序访问 office 项目类

c# - 如何将 PropertyInfo 转换为属性表达式并使用它来调用泛型方法?

c# - 如何使用反射将 IList 动态转换为任意数据类型的数组

c# - 错误 'Unable to cast object of type ' System.RuntimeType' 键入 'EnvDTE80.DTE2'

c# - `typeof(T).IsAssignableFrom(x.GetType())` 可以安全地重写为 `x is T` 吗?

c# - 当值可以为空时如何使用 Convert.ChangeType(value, type)

c# - 从 DatePicker 中以 yyyy/MM/dd 格式获取日期

c# - 向 sender 和 e 传递更多参数?

c# - 在 C# .NET 中使用操作系统的文件类型镜像

c# - 使用自定义 XmlMediaTypeFormatter 删除 web api 响应中的所有命名空间 c# .net