user2754364
user2754364

Reputation:

Static methods can't access instance fields?

I have read many article regarding the static fields that

Static methods have no way of accessing fields that are instance fields, as instance fields only exist on instances of the type.

But we can create and access the instance fields inside the static class.

Please find below code,

class Program
{
    static void Main(string[] args)
    {
      
    }
}

class clsA
{
    
    int a = 1;

    // Static methods have no way of accessing fields that are instance fields, 
    // as instance fields only exist on instances of the type.
    public static void Method1Static()
    {
        // Here we can create and also access instance fields
        // which we have declared inside the static method
        int b = 1;

        // a = 2; We get an error when we try to access instance variable outside the static method
        // An object reference is required for the non-static field, method, or property
        
        Program pgm = new Program();
        // Here we can create and also access instance fields by creating the instance of the concrete class
        clsA obj = new clsA();
        obj.a = 1;
    }
}

Is that true "We can access the non static fields inside static method" ?

Another question If we declare class clsA as static class even at that time we are not getting any compilation error if we declare instance fields inside the static method?

Where I am getting wrong?

Upvotes: 1

Views: 3796

Answers (1)

nvoigt
nvoigt

Reputation: 77285

You cannot access instance fields of the class that the static method is part of, because a static method is not called on an instance of this class. If you create an instance of that class, you can access it's instance fields as normal.

Your b is not an instance field, it's a normal local variable.

The sentence you quoted just means that you cannot do what you tried in the line you commented out: you cannot access a without an instance. Non-static methods use this as the default instance, so you could access a by simply writing a = 17; which is equivalent to this.a = 17;

Upvotes: 1

Related Questions