【发布时间】:2011-10-14 08:39:16
【问题描述】:
我有一个相当长的构造函数,它正在执行各种初始化工作,因此我想将其中的一些工作分解为一些函数。这让我想知道我是否应该将上述函数设为实例或静态方法。我理解从构造函数调用虚函数的风险,但我也认为在没有 100% 实例化的对象上调用实例方法是不对的。当然,这在术语上是矛盾的。
我很想听听人们对此事的看法。我还发现,通过使用静态方法返回初始化变量,我可以将成员目标设为只读。这是我的场景的简化说明。
public class A
{
private readonly string _foo;
public A()
{
_foo = InitialiseFoo();
}
private static InitialiseFoo()
{
// Do stuff
return new string ("foo");
}
}
【问题讨论】:
-
为什么有一个冗长的构造函数?这不是构造函数应有的样子。您应该使用方法来执行冗长的操作。当您尝试使用某些 API 并且此 API 在其构造函数中执行数据库访问和内容并可能引发异常和内容时,总是非常令人沮丧。去做吧。这真的很烦人。构造函数应该很简单。
-
我完全同意你的观点,但我正在编写一个 Windows 服务,它需要首先从配置文件中获取它的服务名称。您只能在它的构造函数中设置服务的名称,所以我有点卡住了。
标签: c# constructor initialization static-methods