Reputation:
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
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