我最近发现C#中的结构体可以有方法。
意外地,我发现自己在代码中使用了一个空结构体的静态方法,而不是我以为正在使用的静态类的静态方法!
例如:
public struct Foo
{
public static void Bar(Param param)
{
...
}
}
目前这个结构体并没有被用作结构体,因为它根本没有任何属性!
这和使用类的静态方法(无论是静态还是非静态)有什么不同吗?有没有理由更喜欢其中一种?(我的直觉告诉我,使用静态结构体方法至少不太直观)
static
的好处(相对于abstract sealed
)是让编译器能够将该类型在变量声明或类型转换中的任何用法标记为错误。 - Mike Zboraystruct
的有趣之处就在于,如果没有非静态数据,则在使用“隐式”无参数实例构造函数之前,已经给你的实例分配了。例如下面是可以的:static void Example() { Foo local; var okStr = local.ToString(); var okBool = local.Equals(local); }
这里的Foo
是像问题中的那样的一个结构。有趣的是,local
看起来未赋值,但由于没有实例字段,因此每个字段都是(真空)分配的,因此这不是对未分配变量的使用。C#编译器很高兴并且运行正常。 - Jeppe Stig Nielsen