13

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

很意外地,我发现自己一直在我的代码中使用空结构的静态方法,而不是我认为我正在使用的静态类的静态方法!

例如

public struct Foo
{
    public static void Bar(Param param)
    {
        ...
    }
}

此时它并没有真正被用作结构,因为它根本没有任何属性!

这与使用类的静态方法(静态或其他)有很大不同吗?有什么理由更喜欢其中一个吗?(我的直觉告诉我,使用静态结构方法至少不太直观)

4

2 回答 2

23

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

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

于 2012-11-14T02:34:42.057 回答
3

行为没有什么不同。C# 通过极大地增加结构和类特性的交集来对结构进行混蛋。就我个人而言,我只会使用一个类,因为它对我来说似乎更正确(当然更符合大多数语言的约定)。

于 2012-11-14T02:35:02.710 回答