【发布时间】:2010-09-16 19:48:02
【问题描述】:
我过去总是将结构视为某种特权较低的事物,或具有较少功能的事物。也许是因为 OOP 概念将所有内容都放入了类中。
从对 C# 的少量接触中,我了解到将类设置为静态可确保其所有成员和函数都是静态的。此外,我们不能有一个构造函数来初始化该类,因为只有一个实例。
public static struct mystruct
{
public static int a;
}
我在堆栈溢出时被指出这是一个错误的方法。谁能详细说明一下。
当我创建一个新的 cs 文件并在控制台中编译它时,我收到了相应的错误消息“静态对此项无效”。 奇怪的是,当我将它添加到现有的工作项目中以查看编译器是否会抱怨但令我惊讶的是它没有。这有什么原因吗??
【问题讨论】:
-
在 C# 中,
static是类型声明中abstract sealed的别名(它还允许进行一些其他编译时检查,例如确保方法也是静态的)。由于结构是值类型并且不允许多态行为,那么为什么不允许static是有道理的。但是,您可以在结构上拥有静态成员。 -
@Steve:如果类是静态的,编译器还会检查类型名称的use。例如,您不能声明 Enumerable 类型的参数。您可能已经意识到这一点,但我想提请注意:)
-
@Jon:没错——谢谢你提醒我。
标签: c# static language-features