关于C#:静态类或对象

Static Class or Objects

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
When to Use Static Classes in C#

很抱歉,如果这个问题毫无意义或者很愚蠢,我试图创建一个Windows服务,在这个服务中我只有几个类文件,每个类文件都有一些调用另一个类文件的函数。

例如

类文件1有一个创建类似电子邮件的方法

1
2
3
4
5
6
7
8
9
10
11
12
public bool CreateEmail()
{
 try
 {
 //code here
 }
 catch (Exception ex)
 {
    //Write to Log
    to create log  call function from **another class file**
 }
}

还有很多这样的调用,我想知道使用静态类更好还是为每个类创建对象,调用方法更好,推荐哪种方法?


扪心自问

  • 这个方法与你的对象有什么关系?
  • 它是否改变了你的物体的状态。

如果它相关并且确实改变了对象状态,那么您应该在类中有这个方法。如果不是,那么您就不需要在类中有这个方法。

从外观上看,很明显,它不会改变任何状态,而是需要来自另一个对象的一些信息来发送邮件。因此,我肯定会将这个类设置为util类(静态类),并在需要时使用它。


考虑:

  • 你需要做单元测试吗,如果是的话,静态类是不好的,如果你遵循测试能力的设计,就不能被模仿。

  • 单一责任原则,不要把每一种方法都放在一个所谓的效用类中。将相关的方法分组到单独的类中,并遵循SRP。

  • 类应具有有意义的名称。实用程序、实用程序或帮助程序不是有意义的名称


  • I would like to know if Using static class is better or creating object for each class and calling the methods will be better.

    如果是多线程环境,并且日志记录要求在多个调用之间共享一些数据,那么为每个调用创建单独的实例。否则,转到静态类和方法。


    如果您只使用类文件对方法进行分组,并且除了调用这些方法外,不需要类的实例,那么您应该使用静态类——这就是它们的用途。