2010-05-15 4 views
0

J'ai une classe statiquePourquoi ne puis-je pas référencer un membre statique d'une classe interne en C#?

namespace MyNameSpace{ 

    public static class MyStaticClass { 

     public static string myStaticMember = ""; 

    } 
} 

Je peux faire référence à myStaticMember dans une autre classe comme ceci:

string varString = MyStaticClass.myStaticMember; 

sauf si MyStaticClass est une classe interne de l'autre classe.

Pourquoi?

Mise à jour: Voici ce que je voudrais faire

using System; 

namespace test 
{ 
    public class MyOuterClass 
    { 


     public static class MyStaticClass 
     { 

      public static string myStaticMember = ""; 

     } 


     MyStaticClass.myStaticMember = "Hello"; 


    } 
} 
+0

Pouvez-vous poster le code? La classe interne est-elle déclarée "privée"? – Oded

+0

Pouvez-vous poster le code réel qui échoue? Je n'ai aucun problème à faire ce que je * pense * que vous décrivez. –

+0

OK, j'ai posté le code – user310291

Répondre

6

Dans ce cas, vous devez faire référence à travers la classe externe:

string varString = MyOuterClass.MyStaticClass.myStaticMember 

MISE À JOUR:

Le code que vous avez posté ne sera pas compilé parce que vous essayez d'accéder à un champ directement à l'intérieur de la classe externe, chaque instruction doit être contenue dans une méthode, vous devez déclarer une méthode dans la classe externe dans laquelle vous pouvez accéder au champ de classe interne.

using System; 
public class Program 
{ 
    public static class MyStaticClass 
    { 
     public static string myStaticMember = ""; 
    } 

    static void Main() 
    { 
     MyStaticClass.myStaticMember = "Hello"; 
     Console.WriteLine(MyStaticClass.myStaticMember); 
    } 
} 
+0

Je suis déjà dans MyOuterClass voir code ci-dessus – user310291

+0

eRROR Message dit myStaticMember est un champ et est utilisé comme un type. – user310291

+0

Le code que vous avez posté ne sera pas compilé parce que vous essayez d'accéder à un champ directement à l'intérieur de la classe externe, chaque code devrait être contenu dans une méthode, vous devez déclarer une méthode dans la classe externe dans laquelle vous pourriez accéder. champ de classe interne. –

2
 MyStaticClass.myStaticMember = "Hello"; 

C'est une instruction d'affectation, pas une déclaration. Les déclarations doivent être écrites à l'intérieur d'une méthode. Un approprié serait le constructeur pour MyOuterClass:

public MyOuterClass() { 
     MyStaticClass.myStaticMember = "Hello"; 
    } 
+0

Et comment puis-je extraire la valeur du constructeur alors? – user310291

+0

Erm, ne calcule pas. Utilisez MyOuterClass.MyStaticClass.myStaticMember dans un autre code pour obtenir la valeur de la variable statique. –

Questions connexes