Mr *_*ies 5 c# constructor static-methods initialization
我有一个相当冗长的构造函数,它正在执行各种初始化工作,因此我想将一些工作分解为一些函数.这让我想知道是否应该制作上述函数实例或静态方法.我理解从构造函数调用虚函数的风险,但我也认为在一个没有100%实例化的对象上调用实例方法是不对的.当然,这是一个矛盾.
我对这个问题的人们的意见感兴趣.我还发现通过使用静态方法返回初始化变量,我可以使成员目标只读.这是我的场景的简化说明.
public class A
{
private readonly string _foo;
public A()
{
_foo = InitialiseFoo();
}
private static InitialiseFoo()
{
// Do stuff
return new string ("foo");
}
}
Run Code Online (Sandbox Code Playgroud)
在构造函数中调用实例方法是很正常的,而且是进行初始化的方法。所以基本上这是一种提取方法重构,以减少构造函数方法体,因此您将初始化的一部分提取到一个单独的方法中,并且构造函数知道保存输入参数等......
关于static修饰符..有时(我相信当没有其他方法来重构时,因为这看起来不好 - 从我的角度来看)你需要调用一个方法来将结果传递到基本构造函数中,所以在这种情况下你必须将其标记为static 在静态上下文中调用,在其他情况下不使用 static 修饰符
public A()
: base(GetLogger())
{
}
private static ILog GetLogger() ...
Run Code Online (Sandbox Code Playgroud)