回答
标记构造函数private
。当然,这并不妨碍类通过static
方法实例化自己,例如...
更实际的是,不允许类实例化的目的是什么。如果它有一个单身人士,那么private
构造函数是适当的。如果要强制子类化,则使类abstract
更好;如果是有实用方法的课程,则使其成为static
是一种方法(那么您只能拥有static
方法)。
我做到了,但它不工作仍然可以创建obj。 – 2012-04-13 12:52:24
@RomeshSomani它取决于你试图从哪里创建实例。它需要完全否认它,使其变得抽象。编辑 - 对不起,我的意思是静态的。 – asawyer 2012-04-13 12:53:12
不,抽象的目的不同。使其静态。 – 2012-04-13 12:54:37
I need to know how to prevent a class from being Instantiated in .net?
你的问题不明确。
你的意思是在运行时实例化吗?制作课程abstract
或static
。
你的意思是说构造函数在代码中是不可访问的吗?使构造函数private
。但请注意,有人仍然可以使用反射来获取构造函数的句柄并在运行时实例化一个实例。
那么,你的意思是?
使类静态是最好的办法,如果你绝对不想要任何实例。这会阻止任何人从创建实例。该课程将被密封和摘要,并且不会有任何构造函数。
此外,该语言会注意到它是一个静态类,并阻止您在各个地方使用它,其中意味着实例,例如,类型参数和变量。这比仅仅使用私有构造函数更清楚地表明意图 - 这可能意味着在该类中创建了实例(例如,用于单例实现)。
哦,使得类的静态将阻止你在课堂上引入任何无谓的实例成员,太:)
有关静态类的详细信息,请参阅MSDN。
关于静态类的好奇,他们不[看起来像类](http://codecrafter.blogspot.ca/2009/09/c-static-classes-are-not-real-classes.html);他们更类似于模块... – 2012-04-13 13:03:47
如果问题是:
How can you make your class not be instanced without having your class be
static
orabstract
?
那么这个问题的答案是落实singleton pattern,这英寸
public sealed class myClass
{
private static readonly Lazy<myClass> lazyInstance =
new Lazy<myClass>(() => new myClass());
public static Instance
{
get
{
return lazyInstance.Value;
}
}
private myClass()
{
// constructor logic here
}
}
单例模式允许你通过周围类为方法的参考,同时还要确保你只有你的类的一个实例:NET 4+这与轻松完成。它还使得测试更容易,因为您可以使用myClass
实现的ImyClass
实例,这在制作模拟对象时非常有用。
没有.NET4你仍然可以实现单件模式,例如:
private static readonly myClass instance = new myClass();
public static Instance
{
get
{
return instance;
}
}
// rest of code remains the same
不具有延迟加载,直到它的名字,还有很多其他的方法,以及(我想大约6种不同的方式),但以上两种是最常见的。
总之,问题可能是询问你是否知道单例模式,以及是否认识到它对于单元测试和模拟对象的静态类的重要性。
正如其他人已经指出的那样,static
字段,甚至那些标记为readonly
的字段都可以设置反射,另外private
构造函数可以使用反射来调用。如果您需要防止这些问题发生,您可能需要将调用代码放在信任度较低的应用程序域空间中,否则您需要将您的类实现为static
。尽管如此,人们并不打扰这样的反思层次来绕过你的约束,除非他们'真的需要'例如编写模糊/极端条纹的单元测试。
- 1. Singleton - 实例化类的最佳方式
- 2. 防止其他类的类实例化
- 3. 注入实例化无法控制的类的最佳方法?
- 4. C++:防止抽象基类的任何实例化的方法?
- 5. 防止DocumentEvent循环的最佳方法?
- 6. 访问类方法到实例方法的最佳方法
- 7. 防止抽象类实例化
- 8. 如何防止此类实例化?
- 9. 处理无法实例化对象的最佳方法?
- 10. “否定”实例的最佳方法
- 11. 最佳实践:调用getInstance方法来实例化对象
- 12. 本地化实体的最佳方法?
- 13. 在Coq中执行通用实例化的最佳方法
- 14. 实例化XMLHttpRequest对象的最佳方法
- 15. 实例化EntityManager的最佳实践
- 16. 防止活动的多重实例化
- 17. Python:在循环中动态实例化Player类的最佳方法?
- 18. Python:从类实例中访问变量的最佳方法?
- 19. 创建运行时确定类型实例的最佳方法
- 20. 什么是防止您的网站被钓鱼的最佳方法?
- 21. Infragistics XamDatagrid - 防止控件在不可见时被实例化
- 22. 检查类被实例化
- 23. 嘲讽在被测方法中实例化的Python类
- 24. 实例化Kotlin类的LinkageError方法notify()
- 25. 访问实例化的类方法
- 26. 全局访问类实例 - 最佳设计方法?
- 27. 使用私有构造函数来防止类的实例化?
- 28. 如何防止某个类的多个对象实例化
- 29. 如何防止依赖注入的类实例化?
- 30. 防止直接实例化的工厂类
为什么不是摘要 – Trikaldarshi 2012-04-13 12:54:19
“不允许被实例化”是'static class'的确切定义。你为什么需要别的东西? – 2012-04-13 12:55:44