c#静态类和非静态类有什么不同(我说的是类本身而不是字段)

Ath*_*han 10 c# static class

语法可能有误

public static class Storage
{
    public static string filePath { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

public class Storage
{
    private void Storage () {};
    public static string filePath { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我从互联网上的一个例子中得到了这个.第二个有什么用?

Fre*_*örk 13

如果你看一下IL代码,静态类就会出现abstract,sealed它有两个重要的特质:

  • 您无法从中创建实例
  • 它不能被继承

第一点的结果是静态类不能包含非静态成员.静态类中可能存在许多静态成员的用法.一个常见的用途是拥有一个班级工厂:

public class SomeClass
{
    public int SomeInt { get; set; }

    public static SomeClass Create(int defaultValue)
    {
        SomeClass result = new SomeClass();
        result.SomeInt = defaultValue;
        return result;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @Thorarin和@Svish:这是对的.它用于回答在非静态类型中使用静态成员的最后一个问题(因为我在原始帖子中解释了过去的问题) (4认同)

Gis*_*shu 6

以下是了解静态类的官方/ MSDN热点

静态类的主要特性是:
*它们只包含静态成员.
*他们无法实例化.
*它们是密封的.
*它们不能包含实例构造函数

基本上,静态类与只具有静态方法和私有ctor的"普通"/非静态类相同.将其标记为静态有助于澄清意图并帮助编译器执行一些编译时检查以禁止某些事情,例如禁止实例化.

我能想到的真实用途:用它来容纳或作为一种组织方式

  • 实用方法(与类型的任何实例无关的方法)例如,数学用于最小和最大方法
  • 扩展方法,例如StopWatch上的Reset方法的StopWatchExtensions