静态结构方法和静态类方法之间有什么区别?

Rav*_*mer 11 c# methods static

我最近发现C#中的结构可以有方法.

很偶然,我发现自己在我的代码中使用了一个空结构的静态方法,而不是我认为我正在使用的静态类的静态方法!

例如

public struct Foo
{
    public static void Bar(Param param)
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

在这一点上它并没有真正被用作结构,因为它根本没有属性!

这与使用类的静态方法(静态或其他)非常不同吗?有什么理由比较喜欢一个吗?(我的直觉告诉我,使用静态struct方法至少不太直观)

cdh*_*wie 18

不,静态成员属于该类型而不属于该类型的实例.在声明静态类成员和静态struct成员之间没有区别(无论是性能还是语义).

重要的是要注意,如果类型的唯一函数是包含静态成员,则应该使用静态类.对于结构体,有一个隐含且不可更改的公共,无参数构造函数.如果类型没有任何实例方法,则应删除创建实例的功能.声明一个类static与声明它是一样的abstract sealed,因此开发人员将无法意外地创建没有目的的实例.

  • 声明一个类`static`有一个额外的好处(超过`abstract sealed`)允许编译器在变量声明或强制转换中标记任何类型的用法作为错误. (3认同)
  • @mikez我认为更重要的区别是"抽象密封类"只是无效的C#. (3认同)