我想创建一个接受Type参数的C#属性。
[MyAttribute(typeof(FooBar))]
public class MyClass
{
将此属性添加到类中,除其他外,应该隐式告诉Visual Studio该类具有该类型的成员变量,其名称派生自该类型。
例如,添加带参数typeof(FooBar)
的属性应隐式创建成员变量private FooBar _foobar;
。
我希望能够通过IDE中的自动执行访问该成员,因此在运行时执行此操作为时已晚。
这有可能吗?我怎么能做到这一点?
答案 0 :(得分:2)
在编译器完成它之后,并没有重写IL的东西。
除了内置于.NET中并由编译器专门处理的属性的简短列表之外,属性根本不会影响代码,它们只是存储在最终程序集中的元数据。
一种方法是使用类似Postsharp之类的东西来完成我上面描述的内容。
基本上,Postsharp和类似系统将.NET编译器生成的最终程序集分开,读取元数据(属性和其他内容),然后从头开始重新构建程序集,根据这些属性注入更多代码。
但是,对于.NET和C#的库存,不,这是不可能的。
作为@MarcinJuraszek评论,这可能与Roslyn(微软即将推出的新编译器平台)有关。我对此几乎没有经验,所以我的答案与当前的稳定版本有关,包括.NET 4.5和C#5.0。