C# 我可以通过属性隐式创建成员变量吗?

C# 我可以通过属性隐式创建成员变量吗?,c#,visual-studio,C#,Visual Studio,我想创建一个接受类型参数的C#属性 [MyAttribute(typeof(FooBar))] public class MyClass { 将此属性添加到类中,除其他外,应隐式地告诉Visual Studio该类具有该类型的成员变量,其名称派生自该类型 例如,添加带有参数typeof(FooBar)的属性应隐式创建成员变量private FooBar\u FooBar 我希望能够通过IDE中的自动完成来访问该成员,所以在运行时这样做太晚了 这可能吗?我怎样才能做到这一点呢?如果没有在

我想创建一个接受类型参数的C#属性

[MyAttribute(typeof(FooBar))]
public class MyClass
    {
将此属性添加到类中,除其他外,应隐式地告诉Visual Studio该类具有该类型的成员变量,其名称派生自该类型

例如,添加带有参数
typeof(FooBar)
的属性应隐式创建成员变量
private FooBar\u FooBar

我希望能够通过IDE中的自动完成来访问该成员,所以在运行时这样做太晚了


这可能吗?我怎样才能做到这一点呢?

如果没有在编译器完成任务后重写IL的东西,我是不会这样做的

除了内置在.NET中并由编译器专门处理的属性的简短列表外,属性根本不会影响代码,它们只是存储在最终程序集中的元数据

一种方法是使用与我上面描述的一样的东西

基本上,Postsharp和类似的系统将.NET编译器生成的最终程序集拆开,读取元数据(属性和其他内容),然后从头开始重建程序集,根据这些属性注入更多代码

但是,对于stock.NET和C#,不,这是不可能的



作为评论,微软即将推出的新编译器平台Roslyn可能会实现这一点。我对此没有什么经验,所以我的答案与当前的稳定版本有关,包括.NET 4.5和C#5.0。

不是直接的。你为什么需要这个?为了给你更好的答案,你应该描述你所面临的问题,假设添加该字段的属性就是解决方案。它可能会给我们一些提示,使我们能够帮助您解决最初的问题,而不是您当前的解决方案。类继承或接口不能帮助您满足这样的需求吗?@CodeCaster我只是在寻找一种避免锅炉板代码的方便方法。我想按类型从中心源检索依赖项,并将其存储在成员变量中。但我希望我可以避免显式定义成员变量,并包含每次检索依赖项的代码。相反,我想定义一个属性,在编译之前告诉IDE存在某种类型和名称的成员变量,并在运行时根据当前的属性检索依赖项。