dividedbyzero
dividedbyzero

Reputation: 99

Accessing Static Members of Static Members

Consider the following classes

class A
{
public static int i;
}

class B
{
public static A a{get;}=new A();  // without new A(), B.A will be null
}

now,

B.a gives a new instance of A and since the variable "i" of class A is static, I can not access "i" through B.a i.e B.a.i is compile time error.

I understand that if I do like below,

class B
{
  static class A
  {
    static int i;
   }
}

then I could do B.A.i.

So my question is how could I access static members of a static member of a class? Is it possible at all and is there any other pattern that I can use.

Also note that making class "A" as static and having class "B" as

class B
{
public static A a{get;}
}

gives a compile time error that "static type cannot be used as return type".

Upvotes: 1

Views: 444

Answers (3)

Rahul
Rahul

Reputation: 77866

Since i is static member of A you can access it directly like

class B
{
  public static A a {get;} = new A();  
  public int ii{get;} = A.i; 
}  

Upvotes: 1

Coskun Ozogul
Coskun Ozogul

Reputation: 2469

You don't need to instantiate a class to access it's static members. Simply you can try :

int value = A.i;

If you need, you can add a static class too :

public static class A
{
public static int i;
}

and you can use anywhere in your code like :

int value = A.i;

Upvotes: 0

rory.ap
rory.ap

Reputation: 35260

how could I access static members of a static member of a class?

If something is a member of a class -- static or not static -- that means it's either a value or a reference to an instance of something. Therefore, if you know you have an instance of a class but that class has static members itself, then just access those members statically:

class MyClass
{
    public static string Value { get; }
}

string x = MyClass.Value;

Upvotes: 0

Related Questions