【发布时间】:2011-05-08 22:42:45
【问题描述】:
如果我定义一个具有私有默认构造函数和一个有参数的公共构造函数的类,我如何访问私有构造函数?
public class Bob
{
public String Surname { get; set; }
private Bob()
{ }
public Bob(string surname)
{
Surname = surname;
}
}
我可以通过类上的静态方法访问私有构造函数,如下所示:
public static Bob GetBob()
{
return new Bob();
}
我认为我可以通过扩展方法访问私有构造函数,因为(根据我的理解)扩展方法被翻译成 似乎是静态方法在课堂上,但我不能:
static class Fred
{
public static Bob Bobby(this Bob bob)
{
return new Bob();
}
}
那么,如何访问私有构造函数?
谢谢
编辑:
我想这样做的原因是我想为我们的一个业务类创建测试,但不允许此类的使用者能够错误地实例化对象。我正在测试它,所以我知道(我希望!)在什么情况下测试会失败。我现在仍在测试 n00b,所以我的想法可能是也可能不是做事的“错误方式”。
我已经改变了我的测试策略,只是按照这个类的消费者的方式做事,即调用公共方法,如果公共方法没问题,假设私有方法没问题。我仍然更愿意测试私有方法,但我的老板 对可交付成果感到不满 :-(
【问题讨论】:
-
幽默,你为什么要在你的类实现之外调用你的私有构造器?
-
为什么是近距离投票?这仍然是一个有效的问题,即使不建议获取构造函数。
-
同意 -- 仍然是一个有效的问题,为什么要关闭?
-
回复:测试私有方法。我发现通过单独测试私有方法,我的测试比只测试公共方法更小更精确。我倾向于将“私有”变成“受保护”,并在测试库中编写一个特定的包装类,将它们公开为公共版本,而不是使用反射。
-
是的——很多以前的开发者写的遗留代码。另外,我不得不说,所涉及的业务逻辑(零件交换销售)荒谬地复杂(一开始比我的博士学位更复杂)——但这就是我们客户的工作方式。
标签: c# constructor visibility default-constructor