And*_*nZA 25 c# constructor visibility default-constructor
如果我使用私有默认构造函数和具有参数的公共构造函数定义类,如何访问私有构造函数?
public class Bob
{
public String Surname { get; set; }
private Bob()
{ }
public Bob(string surname)
{
Surname = surname;
}
}
Run Code Online (Sandbox Code Playgroud)
我可以通过类上的静态方法访问私有构造函数,如下所示:
public static Bob GetBob()
{
return new Bob();
}
Run Code Online (Sandbox Code Playgroud)
我认为我可以通过扩展方法访问私有构造函数,因为(根据我的理解)扩展方法被翻译,以便它们看起来是类上的静态方法,但我不能:
static class Fred
{
public static Bob Bobby(this Bob bob)
{
return new Bob();
}
}
Run Code Online (Sandbox Code Playgroud)
那么,我如何访问私有构造函数?
谢谢
我想这样做的原因是我想为我们的某个业务类创建测试,但不允许此类的使用者能够错误地实例化对象.我正在测试它,所以我知道(我希望!)在什么情况下测试会失败.我现在还在测试n00b,所以我的想法可能是也可能不是做事的"错误方式".
我已经改变了我的测试策略,就像这个类的消费者那样做事,即调用公共方法,如果公共方法没问题,假设私有方法没问题.我仍倾向于测试私有方法,但我的老板是呼吸了我的脖子上交付:-(
jga*_*fin 44
由于某种原因,默认构造函数是私有的.开发人员并不是为了娱乐而私密.
但是如果您仍然想使用默认构造函数,则可以使用反射来获取它.
Activator.CreateInstance(typeof(YourClass), true);
Run Code Online (Sandbox Code Playgroud)
编辑
我看到了你对测试的评论.切勿测试受保护的或私有的方法/属性.如果您无法通过公共API设法测试这些方法/属性,那么您可能做错了.删除它们或重构该类.
编辑2
忘了绑定旗帜.
| 归档时间: |
|
| 查看次数: |
19136 次 |
| 最近记录: |