【问题标题】:C# Reflection Help? (GetProperties)C#反射帮助? (获取属性)
【发布时间】:2012-04-01 18:27:09
【问题描述】:

我的代码返回一个 PropertyInfo 的空白数组

PropertyInfo[] classProperties = typeof(Processor).GetProperties();

此类中的所有属性都是公共的。 使用 .NET 2.0 框架。

我也尝试过使用前面在我的代码中声明的实例:

PropertyInfo[] classProperties = Computer.Processor[0].GetType().GetProperties();

我已经尝试使用默认、实例和公共等绑定。

有什么想法吗?

【问题讨论】:

  • 可以发一下Processor类的代码吗?

标签: c# reflection properties


【解决方案1】:

无参数表单将返回公共属性。所以有两种可能的选择:

  • 它们不是属性(而是字段)
  • 它们不公开

公共属性是 a: 带有 public 修饰符,b: 带有 getset 访问器,例如:

public int Foo {get;set;} // automatically implemented property
public string bar;
public string Bar { // manually implemented property
    get { return bar; }
    set { bar = value; }
}

另请注意,作为显式接口实现实现的接口绑定属性仅在您查询接口而不是类时才会反映;因此,除非您从 typeof(ISomeInterface) 开始,否则不会显示以下内容:

string ISomeInterface.Bar { get { return someValue; } } 

【讨论】:

  • 你说得对——我需要的是 GetFields() 而不是 GetProperties()。
  • @CJxD 实际上,我想说您需要的是:更改您的类以公开属性而不是字段。在几乎所有情况下,公共字段都是一个坏主意。
  • 因为我有大量带有起始值的字段,并且这些字段永远不会包含用户不应该能够转换或查看的信息,所以我选择了公共字段来减少意大利面条式代码。为什么不呢?
  • @CJxD 因为大多数数据绑定和抽象都在属性级别工作,对于 BinaryFormatter 或任何改变结构或使用“ref”语义的代码来说,这是一个重大变化,因此可以以后再添加会很痛苦。加上添加{get;set;} 几乎不是意大利面条
猜你喜欢
  • 1970-01-01
  • 2011-04-06
  • 2011-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-14
  • 1970-01-01
相关资源
最近更新 更多