2010-05-15 55 views
0

我有一個靜態類爲什麼我不能從C#中的內部類引用靜態成員?

namespace MyNameSpace{ 

    public static class MyStaticClass { 

     public static string myStaticMember = ""; 

    } 
} 

我可以在另一個類引用myStaticMember這樣的:

string varString = MyStaticClass.myStaticMember; 

除非MyStaticClass是一個內部類的其他類的。

爲什麼?

更新:這是我想要做的

using System; 

namespace test 
{ 
    public class MyOuterClass 
    { 


     public static class MyStaticClass 
     { 

      public static string myStaticMember = ""; 

     } 


     MyStaticClass.myStaticMember = "Hello"; 


    } 
} 
+0

你可以發佈代碼嗎?內部類是否聲明爲「private」? – Oded 2010-05-15 07:39:50

+0

你能發佈失敗的實際代碼嗎?我在做你想描述的東西時沒有問題。 – 2010-05-15 07:40:47

+0

好的,我發佈了代碼 – user310291 2010-05-15 10:14:51

回答

6

在這種情況下,你需要通過外部類引用它是什麼:

string varString = MyOuterClass.MyStaticClass.myStaticMember 

UPDATE:

您發佈的代碼將無法編譯,因爲您試圖直接訪問外部類中的字段,每個語句應該包含在一個方法中,你需要在外部類中聲明一個方法來訪問內部類字段。

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

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

我已經在MyOuterClass中看到上面的代碼 – user310291 2010-05-15 10:15:15

+0

eRROR消息說myStaticMember是一個字段,並且像使用類型一樣使用。 – user310291 2010-05-15 10:16:30

+0

您發佈的代碼不會編譯,因爲您試圖直接訪問外部類中的字段,每個代碼都應該包含在方法中,您需要在外部類中聲明一個方法,以便在其中訪問內部類字段。 – 2010-05-15 11:11:09

2
 MyStaticClass.myStaticMember = "Hello"; 

這是一個賦值語句,而不是一個聲明。語句必須寫在方法中。一個合適的將是MyOuterClass的構造函數:

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

然後,我將如何檢索構造函數的值呢? – user310291 2010-05-15 15:37:50

+0

呃,不計算。在其他代碼中使用MyOuterClass.MyStaticClass.myStaticMember來獲取靜態變量的值。 – 2010-05-15 15:53:42

相關問題