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