由于属性仅仅是方法的语法糖,因此我不明白为什么C#可以拥有扩展方法而没有扩展属性。
这是关于数据绑定的问题,假设我有一个用于绑定到我的UI的对象,并且我想根据该对象的其他属性来隐藏或显示它。我可以添加一个IsVisible或Visibility的扩展属性,并将该属性绑定到UI。
虽然无法绑定扩展方法,但能够为无法扩展的现有类型添加可绑定的属性可能非常有用。
public bool IsInTransaction
{
get { return _session.Is().Not.Null && _session.Is().InTransaction; }
}
这看起来非常愚蠢,因为除非我直接修改会话对象上的源代码,否则没有办法将Is插入为属性。
我不知道为什么不行。属性只是具有不同语法的getter/setter方法。
这将是一个不错的功能,但我看到很多人说他们想要它用于数据绑定,但由于它使用反射,这是不可能的。
我想如果使用它们没有或只有最小的性能损失,那么它们会很棒。
看起来很容易被滥用。正如其他人所提到的那样,C#属性只是方法的语法糖。然而,将它们实现为属性具有某些含义:访问不会产生副作用,修改属性应该非常廉价。后者是至关重要的,因为似乎扩展属性几乎总是比传统属性更昂贵。
开发人员应该使用属性来组织名称层次结构,避免使用驼峰命名法或下划线连接的名称拼接。 例如,他们应该扩展字符串类以使用类似于“some str”.decode.url 的东西,而不是 HttpUtility.UrlDecode。 目前在 C# 中实现这一点的唯一方法是:"some str".decode().url
好的,请加上索引属性和静态扩展内容,因为我非常想要它们用于System.Console(这不是开玩笑!)。