关于C#:静态类和方法的实例

Static Classes and Methods Practical Examples

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

Possible Duplicate:
When to Use Static Classes in C#

我理解静态类和静态类成员的概念,但我确信我可以在我的项目中更多地使用它们。有人能给我举一些实际的例子,说明他们何时在C中创建和使用了静态类吗?

谢谢


静态类和方法的最实际使用是创建扩展方法。类似于LINQ查询扩展方法。


为了响应您对扩展方法示例的请求,这将使字符串的第一个字母大写。

1
2
3
4
5
6
7
8
9
10
11
12
13
public static class StringExtensions
    {
        public static string UppercaseFirst(this String s)
        {
            if (string.IsNullOrEmpty(s))
            {
                return string.Empty;
            }
            char[] a = s.ToCharArray();
            a[0] = char.ToUpper(a[0]);
            return new string(a);
        }
    }

在代码的其他地方,您可以这样使用它

1
2
3
var pirate ="yar";
System.Diagnostics.Debug.WriteLine(pirate.UppercaseFirst());
//Yar


静态类就像一个保存方法和其他数据的容器。考虑一个数学实用程序类。您不想创建MathUtility的实例,但可以定义一个常量(如PI)或一些用于数学功能的方法(static double sqrt(double))。

您可以在一个非静态类中完成所有这些事情;但是它们可能与它们所连接的类没有太多关系。

扩展方法也需要它们——这允许您增强预定义类的功能。

参见C中的数学类链接。


考虑单件模式-您只想使用一个实例和一个实例:

1
2
3
4
5
6
7
8
9
10
11
 public class MySingleton
 {
      protected static Lazy<MySingleton> _instance = new Lazy<MySingleton>(() => new MySingleton());

      protected MySingleton() {}

      public static MySingleton Instance
      {
          get { return _instance.Value; }
      }
 }

构造类的方式,只能使用存储在静态变量中的一个实例。考虑EDOCX1×1的静态特性。

此外,静态项对于状态维护是有用的;例如,您希望缓存任何实例所需的内存中的一些数据,但不需要重新读取数据。

您还需要为扩展方法创建静态类。


当您需要在设计中表示一个流程时,与实体或值不同,您应该使用一个静态类。流程是设计中的一个对象或事物,它没有状态,但操纵或管理其他对象的状态。它将拥有不接触类本身的私有或公共状态变量的静态方法,但只对传递给这些方法的对象的公共属性进行操作。

一些例子可能包括为学术机构执行调度功能的类,

或负责在入境港处理散货和装运集装箱,以便装载到船舶或飞机上的一类。


静态类(使用static关键字)是一个抽象和密封的类。因此,允许静态成员。您需要使用静态类来实现扩展方法,因为这是由C编译器仲裁的。


大多数时候我使用static类是用于工具、实用程序函数。


实用程序类、帮助程序类、转换类…任何一组方法放在一个实例上都没有意义,但是与其他类实例一起工作的话,都是静态的很好的候选者。还有很多其他的例子-这些只是一些。