2015-04-04 33 views
1

我在用户控件中有这样的代码。这个想法就像一个普通变量一样工作,但设置后,它会强制控制重绘。带定制变量的样板代码{get;组; }

private int _imageHeight; 

public int ImageHeight 
{ 
    get { return _imageHeight; } 
    set 
    { 
     _imageHeight = value; 
     Invalidate(); 
    } 
} 

我明白{ get; set; }了我的一切只是写的代码,除了Invalidate()部分。有没有一些方法我不必写变量声明和getter/setter代码,但仍然得到Invalidate()部分?

+0

为什么不在调用setter的同一个成员中调用'invalidate'? – 2015-04-04 20:48:46

+1

目标是消除样板代码,而不是让更多的人笑。 – Zuoanqh 2015-04-04 20:52:55

+0

'invalidate'方法做了什么?也许你可以使用反射无效,而无需编写get set。 – 2015-04-04 20:59:32

回答

2

您正在寻找的概念被称为面向方面编程。 使用面向方面的编程,您可以摆脱Boilerplate并声明一个在调用setter之后无效的方面(作为Attribute)。 (也可以在课堂上完成)。

https://www.postsharp.net/确实允许AOP在c# 我曾经自己尝试过一次,可悲的是我们团队的其他人并不认为这种样板是一个问题。所以我再次放弃它,但它可以做到你想要的。