Ðаn*_*Ðаn 5 c# extension-methods properties
在未来的C#版本中是否有"扩展属性"的计划?
在我看来,他们可能会非常直接地用更多的"编译器魔术"来实现.例如,在扩展方法名称上使用get_和set_前缀会将该方法转换为扩展属性:
public class Foo
{
public string Text { get; set; }
}
public static class FooExtensions
{
public static string get_Name(this Foo foo)
{
return foo.Text;
}
public static void set_Name(this Foo foo, string value)
{
foo.Text = value;
}
}
Run Code Online (Sandbox Code Playgroud)
是否有任何技术限制可以防止这种情况发生?这会在幕后产生太多东西吗?不值得努力的重要性?
功能请求的官方站点是http://connect.microsoft.com/VisualStudio.
目前已经为扩展性能的要求在这里.
微软在2008年7月29日的答复包括以下内容:
扩展属性是一个常见的请求,我们实际上已经为下一版本的语言设计了很多,但最终由于各种困难而不得不废弃它.它仍然在我们的雷达上.
一般来说,我认为这会鼓励不良做法.属性应该代表有关对象的某种状态,而方法应该代表工作单元.但是许多开发人员倾向于将计算密集型或相对长时间运行的代码放在getter和setter中,在那里它们更适合作为方法.扩展的对象是不一样从中获取的.如果您需要添加属性,从哲学角度来看,您正在谈论需要向对象添加有状态信息.这应该通过从类派生来完成.