C# 无法在静态方法中使用实例变量
为什么我们不能在C# 无法在静态方法中使用实例变量,c#,oop,C#,Oop,为什么我们不能在静态方法中使用实例变量? 我知道静态方法是在不创建类实例的情况下调用的,但是什么限制了在静态方法中使用非静态变量呢 class MyClass { // non-static instance member variable private int a; //static member variable private static int b; //static method public static void DoSomet
静态方法中使用实例变量
?
我知道静态方法是在不创建类实例的情况下调用的,但是什么限制了在静态方法中使用非静态变量呢
class MyClass
{
// non-static instance member variable
private int a;
//static member variable
private static int b;
//static method
public static void DoSomething()
{
//this will result in compilation error as “a” has no memory
a = a + 1;
//this works fine since “b” is static
b = b + 1;
}
}
试图在static
方法中放入一个非静态变量会让编译器想知道我应该真正更新这个变量的哪个实例?静态
方法与类实例不相关,因此在不存在实例的情况下,不可能在实例上调用实例变量。尝试在静态
方法中放置非静态变量会使编译器想知道应该更新此变量的哪个实例?静态
方法与类实例无关,因此在不存在实例的情况下,不可能在实例上调用实例变量。您需要类的实例才能访问实例字段。静态字段可以通过实例和静态方法访问,但不能通过其他方式访问。由于每个实例中都有一个a
,因此可能会重复,您希望增加哪个?如果您还没有创建任何实例呢?您可以将一个实例作为参数传递给一个静态方法?如果是这样,考虑无限可滥用而不是创建静态类。为了访问一个实例字段,您需要类的实例。静态字段可以通过实例和静态方法访问,但不能通过其他方式访问。由于每个实例中都有一个a
,因此可能会重复,您希望增加哪个?如果您还没有创建任何实例呢?您可以将一个实例作为参数传递给一个静态方法?如果是这样,考虑无限可滥用,而不是创建静态类。