2017-04-11 4 views
1

Betrachten Sie die folgenden KlassenZugriff auf statische Mitglieder von statischen Mitglieder

class A 
{ 
public static int i; 
} 

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

jetzt,

Ba eine neue Instanz von A gibt und da die Variable "i" der Klasse A statisch ist, kann ich nicht Zugang "i" durch Ba dh Bai ist Kompilierzeit Fehler.

Ich verstehe, dass, wenn ich wie unten tun,

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

dann könnte ich B.A.i. tun

Also meine Frage ist, wie ich auf statische Mitglieder eines statischen Mitglieds einer Klasse zugreifen könnte? Ist das überhaupt möglich und gibt es ein anderes Muster, das ich verwenden kann?

Beachten Sie auch, dass die Klasse machen „A“ als statische und mit Klasse „B“ als

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

eine Kompilierung Fehler gibt, dass „statischen Typ nicht als Rückgabetyp verwendet werden kann“.

+7

Wenn Sie mich bekommen wollen, tun Sie einfach A.i. Wie ist B hier überhaupt relevant? – BoltClock

+0

Ich weiß. Ich wollte nur wissen, ob das möglich ist. Versuche, tatsächlich Muster zu lernen. – dividedbyzero

Antwort

1

Seit i ist statisches Mitglied von A Sie können direkt darauf zugreifen wie

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

Schönes Muster. Ich konnte nicht daran denken. Aber warum ist die Rückgabe des statischen Typs nicht erlaubt? – dividedbyzero

+0

@dividedbyzero, bist du sicher ??? Ursache nur überprüft und es kompiliert gut – Rahul

+0

Können Sie Ihren Code teilen? – dividedbyzero

0

Wie kann ich auf statische Member eines statischen Members einer Klasse zugreifen?

Wenn etwas ein Mitglied einer Klasse ist - statisch oder nicht statisch -, dass es entweder ein Wert oder ein Verweis auf eine Instanz von etwas bedeutet. Deshalb, wenn Sie wissen, dass Sie eine Instanz einer Klasse haben, aber diese Klasse hat statische Mitglieder selbst dann zugreifen nur die Mitglieder statisch:

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

string x = MyClass.Value; 
+0

"Wenn Sie wissen, dass Sie eine Instanz einer Klasse haben, diese Klasse jedoch statische Elemente selbst besitzt, dann greifen Sie nur statisch auf diese Elemente zu" Wie kann ich auf das statische Member über die Instanz einer Klasse zugreifen? – dividedbyzero

+0

Sie nicht ... Sie greifen einfach durch die Klasse selbst, genau wie mein Beispiel. –

+0

Ich verstehe das. Mein Problem ist Zugriff auf i durch B. – dividedbyzero

0

Sie keine Klasse instanziiert müssen zugreifen, es ist statisch Mitglieder. einfach können Sie versuchen:

int value = A.i; 

Wenn Sie benötigen, können Sie auch eine statische Klasse hinzufügen:

public static class A 
{ 
public static int i; 
} 

und Sie können überall in Ihrem Code wie verwenden:

int value = A.i; 
+0

Ich bin auf der Suche nach A.i durch die Klasse B. – dividedbyzero

+1

Klasse B {int Wert = A.i; } –

+0

Gute Technik. Aber meine Sorge ist jedes Mal, wenn eine Eigenschaft in A erhöht wird, muss auch eine Codezeile bei B hinzugefügt werden. – dividedbyzero

Verwandte Themen