在C#中,我可以让auto属性在属性的帮助下执行一些额外的工作吗?
此问题与此相关,但与此不同: 我喜欢汽车属性,但有时我不得不这样做:在C#中,我可以让auto属性在属性的帮助下执行一些额外的工作吗?,c#,custom-attributes,automatic-properties,C#,Custom Attributes,Automatic Properties,此问题与此相关,但与此不同: 我喜欢汽车属性,但有时我不得不这样做: private string someName; public string SomeName { get { return someName; } set { someName = value.Trim(); } } 如果我不得不多次做同样的事情,我开始希望我不需要键入那么多行/字符的代码。我希望能够截取该值并对其进行类似的更改: publi
private string someName;
public string SomeName
{
get
{
return someName;
}
set
{
someName = value.Trim();
}
}
如果我不得不多次做同样的事情,我开始希望我不需要键入那么多行/字符的代码。我希望能够截取该值并对其进行类似的更改:
public string Somename
{
get;
[Trim]
set;
}
有没有办法做到这一点?这会很愚蠢吗?有更好的办法吗?还有其他一般性意见吗?我承认,我给出的例子有点假设,我现在找不到确切的代码,这让我想到了这一点
谢谢。不,没有办法做到这一点。C#auto属性只是最微不足道的属性的语法糖,仅此而已 您可以使用AOP来完成,就像使用一样,但在这种情况下为什么不使用备份存储呢 此外,为了完整性,您可能应该这样做:
someName = (value ?? string.Empty).Trim();
也可以处理null
请注意,如果您有一个涉及更多工作的具体案例,您可能应该询问该案例,而不是您在问题中遇到的琐碎案例谢谢,Microsoft没有为面向方面的编程提供自己的解决方案吗?在一定程度上,使用其上下文绑定对象,但对于大多数AOP实现来说,这并不是一个很好的解决方案。如今,IL-weaver在这方面做得更好,可以处理任何类型的对象,而使用Microsoft方法,您必须从一个公共类继承。等等,“IL-weaver”是将语法糖扩展为不同代码的东西?它是否类似于使用try/finally,代码契约魔术?我认为IL-weaver中的bug有点难以追踪,因为它可能会混淆调试器。是的,它就是这样做的。它可以在编译时或运行时分离IL,添加更多代码,然后重新组装。通常情况下,虽然他们会相应地修改调试信息,但我在使用Postsharp进行调试时从未遇到任何问题。但是是的,这是一个你需要管理的风险。