我将编写代码,其中我需要只保存方法的类。我认为让类静态是个好主意。一些高级程序员认为不要使用静态类。我没有找到任何理由不使用静态类的理由。有人可以用C#语言知道使用静态类有什么害处。静态类使用是否需要比创建类的对象更多的内存?我会清楚我的班级没有单一领域,因此也没有财产。
有关详细信息,我还将解释代码。
我们有产品需要对图表设置进行XML处理。我们从类库中的XML文件中读取对象,该类保存与图表相关的属性。现在我有两个Layers,第一个是产品第二类库和XML相关的操作。实际上,高级程序员需要独立的类来读写XML。我让这个类静态。
在另一种情况下,我有chartData类。在那个类我想要的方法,比如Line of Axis,图表系列是否有效。此外,图表的颜色是否以ARGB格式或纯色名称存储。他们不希望这些方法在同一个项目中。现在我可以使类静态或创建对象。
答案 0 :(得分:5)
如果你的班级不需要管理状态,那么绝对没有理由不将其声明为静态。
在C#中,某些类甚至必须是静态的,就像那些具有扩展方法的类一样。
现在如果将来它有可能需要状态,最好不要将其声明为静态,就像之后更改它一样,消费者也需要更改其代码。
答案 1 :(得分:5)
一个问题是在某些情况下静态测试可能更难(不是不可能)
答案 2 :(得分:3)
静态课程的危险在于它们经常成为神的对象。他们知道太多,他们做得太多,他们通常被称为" Utilities.cs"。
另外,仅仅因为你的班级掌握方法并不意味着你不能使用普通班级,但这取决于你班级的作用。它有任何州吗?是否会保留您的方法中正在修改的任何数据?
答案 3 :(得分:1)
拥有静态类并不错,但可以让你想到为什么你有这些方法。有些事情要记住:
如果方法管理项目中的类的行为,则可以直接将方法添加到这些类中:
//doing this:
if(product.IsValid()) { ... }
//instead of:
if(ProductHelper.IsValid(product)) { ... }
如果方法管理你无法修改的类的行为,你可以使用扩展方法(到一天结束时是静态的!但它会增加语法糖)
public static bool IsValid( this Product product ) { ... }
//so you can do:
if(product.IsValid()) { ... }
如果方法耦合到您可能想要模拟的外部服务,使用带有虚方法的非静态类或实现接口将允许您在需要使用时用模拟替换实例:
//instead of:
StaticService.Save(product);
//you can do:
public IService Service {get;set;}
...
Service.Save(product);
//and in your tests:
yourObject.Service = new MockService(); //MockService inherits from your actual class or implements the same IService interface
另一方面,在非静态类中使用逻辑将允许您使用多态并将该实例替换为扩展该行为的另一个实例。
最后,在非静态类中使用逻辑将允许您使用IoC(控制反转)和基于代理的AOP。如果您对此不了解,可以查看一下Spring.net,Unity,Castle,Ninject等框架。只是为了给您一个例子,说明您可以对此做些什么:您可以使所有类实现IService记录他们的方法,或检查一些安全约束,或打开数据库连接并在方法结束时关闭它;没有将实际代码添加到类中的所有内容。
希望它有所帮助。
答案 4 :(得分:0)
这取决于何时使用静态类的情况。在一般情况下,您可以在不需要管理状态时创建静态类。例如,Math.cs或Utility.cs - 您具有基本的实用程序功能 - 例如字符串格式化等。
您希望使用静态的另一种情况是您希望不会修改类。当系统增长并且您发现必须修改此静态类时,最好删除static关键字。如果没有,那么你将错过OOD的一些好处 - 例如多态,接口 - 例如你可以发现我需要在静态类中更改特定方法,但是因为你不能覆盖静态方法,那么你可能会必须“复制并粘贴”稍作修改。
答案 5 :(得分:-5)
一些高级程序员认为不要使用静态类。
告诉他他是一名实习生,甚至不是大三学生。简单。 static关键字是有原因的。如果你的类只有没有保持状态的方法 - 并且这些情况存在 - 那么将它们放入静态类是有效的。点。
有人知道在C#语言中使用静态类会有什么危害。
没有。唯一有效的论点是你的设计是破碎的(即类不应该是静态的并保持状态)。但是,如果你真的有不保持状态的方法 - 那些情况就存在了,比如"数学"上课 - 然后抱歉,这是一种完全有效的方法。没有负面因素。