Static methods cant access instance fields?

2019-03-06 00:01发布

问题:

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 acces instance varible 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?

回答1:

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;



标签: c# .net oop