有人建议我如何简化以下代码
private bool isMethodCalled;
private void CallMethod()
{
if (!isMethodCalled)
{
this.CallCertainMethod();
isMethodCalled = true;
}
}
private int field1;
public int Property1
{
get
{
CallMethod();
return this.field1;
}
set { this.field1 = value; }
}
private int field2;
public int Property2
{
get
{
CallMethod();
return this.field2;
}
set { this.field2 = value; }
}
private int field3;
public int Property3
{
get
{
CallMethod();
return this.field3;
}
set { this.field3 = value; }
}
答案 0 :(得分:1)
您可以使用像PostSharp这样的AOP框架来创建一个可以调用CallMethod
的属性,并使用Property1
,Property2
和Property3
的自动属性。虽然除非有很多其他属性,否则它不会在代码行数上节省太多。
答案 1 :(得分:1)
您可以简化的内容如下:
private void CallMethod()
{
if (!isMethodCalled)
{
this.CallCertainMethod();
isMethodCalled = true;
}
}
为:
private void CallMethod()
{
if (!isMethodCalled) this.CallCertainMethod();
isMethodCalled = true;
}
作为旁注:
我不知道CallCertainMethod()
做了什么。以防万一,不建议同时查询数据和改变状态。请参阅Command Query-Separation,其中指出每个方法应该是执行操作的命令,或者是将数据返回给调用者的查询,而不是两者。换句话说,提出问题不应该改变答案。