Whether to use static class or not
Possible Duplicate:
When to Use Static Classes in C#
我将编写只包含方法的类所需的代码。我认为让班级保持静止是个好主意。一些高级程序员认为不要使用静态类。我找不到任何不使用静态类的好理由。有人能用C语言知道使用静态类有什么危害吗?静态类的使用是否比创建类的对象需要更多的内存?我将澄清我的类没有单个字段,因此也没有属性。
为了进一步的信息,我还将解释代码。
我们的产品需要对图表设置进行XML处理。我们从类库中的XML文件中读取对象,该文件包含与图表相关的属性。现在我有两个层,第一层是产品二类库和XML相关操作。实际上,高级程序员需要独立的类来读写XML。我使这个班静止不动。
在另一种情况下,我有一类ChartData。在这个类中,我想要一些方法,比如轴线、图表系列是否有效。另外,图表的颜色是以argb格式存储还是以纯颜色名称存储。他们不希望这些方法在同一个项目中。现在我可以制作类静态或创建对象。
一个问题是,在某些情况下,静态测试可能比较困难(并非不可能)。
如果您的类不必管理状态,那么绝对没有理由不声明它是静态的。
在C中,有些类甚至必须是静态的,就像那些具有扩展方法的类一样。
现在,如果将来有可能它需要状态,那么最好不要将其声明为静态的,就像您随后更改它一样,消费者也需要更改他们的代码。
静态类的危险在于它们经常成为上帝的对象。他们知道的太多,做的太多,他们通常被称为"utilities.cs"。
另外,仅仅因为类只包含方法并不意味着不能使用常规类,而是取决于类的功能。它有州吗?它是否保留在您的方法中被修改的任何数据?
拥有静态类并不坏,但是可以让您思考为什么在那里拥有这些方法。要记住的一些事情:
如果方法管理您在项目中拥有的类的行为,您可以直接将这些方法添加到这些类中:
1 2 3 4 5 | //doing this: if(product.IsValid()) { ... } //instead of: if(ProductHelper.IsValid(product)) { ... } |
如果方法管理您不能修改的类的行为,您可以使用扩展方法(到今天为止是静态的)。但它添加了句法糖分)
1 2 3 4 | public static bool IsValid( this Product product ) { ... } //so you can do: if(product.IsValid()) { ... } |
如果方法耦合到外部服务,您可能想使用虚拟方法使用非静态类来模拟,或者实现接口将允许您在需要使用实例时用模拟对象替换实例。
1 2 3 4 5 6 7 8 9 10 | //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(Control Control)和基于代理的AOP。如果你不知道这一点,你可以看看Srim.NET.NET,Unity,CARCH,NICATE等框架,只想给你一个你能做的例子:你可以让所有实现IsService的类记录他们的方法,或者检查一些安全约束,或者打开数据库连接并在方法结束时关闭它,EVE。不向类添加实际代码的RyTee。
希望它有帮助。
这取决于何时使用静态类。在一般情况下,当不需要管理状态时创建静态类。例如,math.cs或utility.cs——其中您有基本的实用程序功能——例如字符串格式等。
另一个您想要使用static的场景是,当您期望类不会被修改时。当系统增长时,你发现你必须修改这个静态类,那么最好删除静态关键字。如果不是这样的话,你会错过一些ood的好处——比如多态性、接口——例如,你会发现我需要在一个静态类中更改一个特定的方法,但是由于你不能重写一个静态方法,那么你可能需要用微小的更改来"复制和粘贴"。
Some senior programmer argue that do not use static class.
告诉他他是个受训者,甚至不是个大三的。简单。静态关键字存在是有原因的。如果您的类只有不保持状态的方法,并且这些情况存在,那么将它们放入静态类中是有效的。点。
Can someone knows in C# language there is any harm in using static class.
不。唯一有效的参数是您的设计被破坏(即类不应该是静态的并且保持状态)。但是如果你真的有不保持状态的方法——而且这些情况存在,比如"数学"类——那么对不起,这是一个完全有效的方法。没有否定。