试图简化代码

时间:2012-06-14 15:41:05

标签: c#-4.0

有人建议我如何简化以下代码

            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; }
            }

2 个答案:

答案 0 :(得分:1)

您可以使用像PostSharp这样的AOP框架来创建一个可以调用CallMethod的属性,并使用Property1Property2Property3的自动属性。虽然除非有很多其他属性,否则它不会在代码行数上节省太多。

答案 1 :(得分:1)

您可以简化的内容如下:

private void CallMethod()
{
    if (!isMethodCalled)
    {
        this.CallCertainMethod();
        isMethodCalled = true;
    }
}

为:

private void CallMethod()
{
    if (!isMethodCalled) this.CallCertainMethod();
    isMethodCalled = true;
}

作为旁注:

我不知道CallCertainMethod()做了什么。以防万一,不建议同时查询数据和改变状态。请参阅Command Query-Separation,其中指出每个方法应该是执行操作的命令,或者是将数据返回给调用者的查询,而不是两者。换句话说,提出问题不应该改变答案。