在我的一次采访中,我被问到static
修饰符的含义。我回答告诉采访者,无法创建静态类的对象和其他有用的点。
但是访问者询问创建这样一个无法创建对象的类有什么用。基本上,他们问的是为什么首先需要static
?
我不确定如何回答这个问题。我应该怎么说?
答案 0 :(得分:18)
面试官可能希望您讨论面向对象的设计和模式,而不是他们希望您背诵该特定修饰符的定义。这里真的没有正确的答案。纯粹主义者可能认为static
是令人厌恶的。实用主义者可能会争辩说,它填补了“一切都是对象”抽象中的一个漏洞,允许您调用实用程序方法,实例化一个新对象只是为了调用它们是没有意义的。这个典型的例子是System.Math
class。
大多数程序员遵循的一般经验法则是,如果您正在操作的数据与对象的任何特定实例无关,那么将该字段/方法标记为静态可能是有意义的。否则,它应该是对象实例的常规成员。
MSDN documentation已经有了很好的解释:
使用
static
修饰符声明一个静态成员,该成员属于该类型本身而不是特定对象。 static修饰符可以与类,字段,方法,属性,运算符,事件和构造函数一起使用,但不能与索引器,析构函数或类以外的类型一起使用。有关详细信息,请参阅Static Classes and Static Class Members (C# Programming Guide)。
static
修饰符在C#中也有更多特定用途,例如定义扩展方法(只能在静态类中定义),定义互操作方法等。还值得注意的是所有静态类在C#中是sealed
,因为没有构造函数,它们不能继承。
答案 1 :(得分:3)
静态不仅适用于类,成员也可以是静态的。使用静态的原因是提供实用程序类型的功能,实例化对象以使用它是没有意义的。例如。为什么要创建一个int才能使用int.Parse()
答案 2 :(得分:2)
您可以查看关于对象/类的状态的“静态”。
其他人提供了一些有用的例子,我不会重申。
答案 3 :(得分:0)
参见http://msdn.microsoft.com/en-us/library/79b3xss3%28v=vs.80%29.aspx - 它解释了静态类的优点。
使用静态类的优点是编译器可以检查以确保不会意外添加实例成员。编译器将保证无法创建此类的实例。
答案 4 :(得分:0)
static修饰符表示类的成员属于类本身而不是类的实例。
即使创建了许多类的实例,也无法在应用程序中复制静态成员。
请参阅以下链接以获取更多信息Static Modifiers
使用静态成员查看以下示例类:
class myClass
{
static int x = 5;
static string name = "Ashraf";
public int X
{
get {return x;}
set {x = value;}
}
public string name
{
get {return name;}
set {name = value;}
}
}
答案 5 :(得分:-1)
Static classes在对外部数据进行操作时非常有用,并且不需要设置或检索其中的任何字段。