2017-04-11 228 views
1

考虑下面的类访问静态成员静态成员

class A 
{ 
public static int i; 
} 

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

给出了一个新的实例,并自变量“i”的A类是静态的,我可以不通过Ba访问“我”即ie编译时错误。

我明白,如果我不喜欢下面,

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

然后我可以做B.A.i.

所以我的问题是我怎样才能访问静态成员的类的静态成员?有没有可能,还有什么其他的模式可以使用。

还要注意的是使“A”级为静态,并且具有类“B”作为

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

给出一个编译时间错误“静态类型不能被用作返回类型”。

+7

如果你想得到我,只需A.i. B在这里如何与之相关? – BoltClock

+0

我知道。只是想知道这是否可能。试图实际学习模式。 – dividedbyzero

回答

1

由于iA的静态会员,您可以直接使用它像

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

好的模式。我想不起来。但为什么返回静态类型不允许? – dividedbyzero

+0

@dividedbyzero,你确定?导致只是检查,它编译好 – Rahul

+0

你可以分享你的代码? – dividedbyzero

0

我怎样才能访问类的静态成员的静态成员?

如果事情是一个类的成员 - 静态或不是静态的 - 这意味着它是一个值或一个实例的东西参考。因此,如果你知道你有一个类的实例,但类有静态成员本身,然后就访问这些成员静态:

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

string x = MyClass.Value; 
+0

“如果你知道你有一个类的实例,但该类本身具有静态成员,那么只需静态访问这些成员”我如何通过类的实例访问静态成员? – dividedbyzero

+0

你不......你只是通过课堂本身来访问它,就像我的例子。 –

+0

我明白这一点。我的问题是通过B访问我。 – dividedbyzero

0

你并不需要实例化一个类来访问它的静态成员。 只要你可以尝试:

int value = A.i; 

如果你需要,你可以添加一个静态类太:

public static class A 
{ 
public static int i; 
} 

,你可以在你的代码的任何地方使用,如:

int value = A.i; 
+0

我正在通过B类访问A.i。 – dividedbyzero

+1

class B {int value = A.i; } –

+0

好技术。但是我的担心是每次财产增加A时,都需要在B处添加一行代码。 – dividedbyzero