![]() |
1
8
可以使用反射,可以为get/set访问器获取一个MethodInfo对象并调用它的invoke方法。 代码示例假定您同时具有get和set访问器,如果要在生产代码中使用此访问器,则必须添加错误处理: 例如,要获取对象obj的属性foo的值,可以编写:
设置:
因此,您可以将obj.getType().getProperty(“foo”).getAccessors()[0]传递给您的方法并执行它的invoke方法。 一种更简单的方法是使用匿名方法(这将在.NET 2.0或更高版本中工作),让我们使用稍微修改过的代码版本示例:
对于作为类SomeClass一部分的int类型的名为foo的属性:
|
![]() |
2
11
你也可以写一些像:
调用示例:
|
![]() |
3
3
属性只是方法的语法糖。 我认为你不能修改一个属性,使它成为一个“你可以调用的getter”实体。 但是,您可以创建一个getPropertyValue()方法,并像传递委托一样传递它。 |
![]() |
4
2
@德鲁尔帮手, 恐怕你不能那样做。编译器生成get-propertyname和set-propertyname方法,但不使用反射就无法访问这些方法。在我看来,你能做的最好的就是创造出 系统.反射.属性信息 和 对象系统 参数并返回propinfo.getvalue(obj,空); |
![]() |
5
1
回复:Aku的回答: 然后你必须先获得那个财产信息。似乎“使用反射”是解决更困难的C问题的标准答案,但是反射产生的代码维护起来并不那么困难。Dror,为什么不创建一个为您读取属性的委托呢?这是一个简单的一行程序,可能是解决您的问题最快、最漂亮的方法。 |
![]() |
Glory Raj · 有什么方法可以使这两个块具有共同的功能吗 2 年前 |
![]() |
milczi · Swift通用无强制展开向下投射 6 年前 |
![]() |
bugs · Typescript-泛型类型扩展自身 6 年前 |
![]() |
John Bustos · C#通用工厂模式,不说明通用工厂模式的类型 7 年前 |
![]() |
Blankdud · 具有默认数据的通用对象创建方法 7 年前 |
![]() |
Tim Hutchison · 从泛型对象列表中读取泛型值 7 年前 |