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

2 回答 2

1

您可以简化以下内容:

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

至:

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

作为旁注:

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

于 2012-06-14T15:47:29.077 回答
1

您可以使用 PostSharp 之类的 AOP 框架来创建一个属性,该属性将调用CallMethod并仅使用 和 的自动Property1属性。尽管除非有很多其他属性,否则它不会节省太多代码行数。Property2Property3

于 2012-06-14T15:45:18.547 回答