2

我正在为一个名为Fasterflect的库做出贡献,其目的是“改善开发人员使用反射的体验”。因此,它提供了一个建立在经典反射之上的抽象,并且可以在完全相同的场景中使用。

下面显示了通过对象实例访问成员的当前语法:

obj.SetPropertyValue( "PropertyWithPrivateSetter", "foo" );
obj.SetFieldValue( "_readOnlyIntegerProperty", 123 );

一位用户建议我们添加对基于 lamdba 的访问的支持(类似于 Fluent Hibernate):

obj.SetPropertyValue<MyClass>( x => x.PropertyWithPrivateSetter, "foo" );
obj.SetFieldValue<MyClass>( x => x.ReadOnlyInteger, Access.CamelCaseField(Prefix.Underscore), 123 );

考虑到反射通常是在编译时您不知道的类型上执行的,我很难考虑这将是有用的场景。我只是缺乏想象力吗?是否存在有效的反射场景,您在编译时就知道类型?

此 NBuilder 功能请求中的原始建议有一些额外的上下文,您还可以查看Fasterflect 功能请求

4

2 回答 2

3

主要使用场景将是您描述的场景:具有公共 getter 但私有 setter 的属性。通过使用 lambda 表达式,您可以提供属性名称的编译时检查(即:没有魔术字符串),但仍然提供一种通过反射设置“只读”属性的方法。

于 2010-03-29T19:47:29.523 回答
0

为了扩展 Reed 所说的内容(他说的比我输入的内容更简洁),一个非常有效的场景是“只读工厂”,它生产出提供真正只读上下文或提供读取设置的包装器-only 对象并避免构造函数设置(即真正的密封类)。

于 2010-03-29T19:55:56.713 回答