假设我有一个简单的类Adds:
public class Multiply
{
public int A {get; set;}
public int B {get; set;}
public int C {get; set;}
public List<int> Result {get; set;}
public void Calculate()
{
if (A != 0 && B!= 0 && C != 0)
{
Result.Add(A);
Result.Add(B);
Result.Add(C);
Result.Add(A * B);
Result.Add(A * C);
Result.Add(B * C);
Result.Add(A * B * C);
}
}
}
以上课程模拟了我的实际应用。我有一系列设置的参数,在本例中为A,B和C.然后我执行Calculate并使用Multiply对象的Result属性来访问结果。
(可能有更好的方法来完成这个模板;想到延迟加载。如果你想建议一个更好的模板,那就不是我的问题的目的;它只是一个简单的例子来说明我的问题。)
这是我的问题:
如果我正在使用Object Intializer语法:
Multiply m = new Multiplier()
{
A = 1,
B = 2,
C = 3
}
m.Calculate();
DoSomething(m.Result[5]); //DoSomething(6);
有没有办法在Calculate()
初始化中执行m
?
答案 0 :(得分:5)
使结果成为只读属性并将计算逻辑移动到它。
但不,你不能用初始化语法调用方法。然后它不会是初始化语法,它只是一些替代的C#语法。
答案 1 :(得分:1)
据我所知......
但是:你可以在Result
的getter中进行计算。
编辑:
由于有人已经发布了这个,你也可以强制参数进入你的构造函数,而不是使用初始化块。
这实际上更好,因为你正在缓存结果。代码的工作方式,您可以随时更改A,B和C,但缓存的值不会更改。通过封装这些属性并仅将它们放在构造函数中,可以防止对象陷入不一致状态,并且可以在构造函数中放置所需的任何代码。