2014-05-08 27 views
1

我是C#的新手,所以原諒這個問題,但我很困惑:爲什麼我需要一個類程序的實例來訪問公共和同一類的方法沙箱?訪問同一類中的公共方法需要一個實例?

namespace GoogleTest 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     {  
      Program p = new Program(); 
      p.Sandbox();    
     } 

     public void Sandbox() 
     { 
      ... 
     } 
    } 
} 
+0

從測試代碼中刪除'public'。用新信息再次提問。此外,*搜索*爲 - *和報告* - 當您不使用實例時您收到的錯誤消息。 – user2864740

+0

http://stackoverflow.com/questions/3371839/is-it-possible-to-access-an-instance-variable-via-a-static-method,http://stackoverflow.com/questions/12871297/how有沒有訪問實例成員的靜態方法?rq = 1 – user2864740

+0

@ user2864740:我沒有收到錯誤。我只是看不到沒有實例的非靜態方法。我瞭解下面指出的基本知識。令人困惑的是,我意識到我需要一個程序實例**在程序本身**中。現在我懂了。謝謝大家。 –

回答

1

因爲您試圖從靜態方法中訪問它,但Sandbox是一種實例方法。

如果您Sandbox靜態,這將不要求:

static void Main(string[] args) 
{  
    Sandbox();    
} 

public static void Sandbox() 
{ 
     ... 
} 

注意,它也不必是public - public允許它通過其他類和內的其他使用組件,但在Program之內,這不是必需的。

4
public void Sandbox() 
{ 
    ... 
} 

是重要的組成部分:該方法不標明靜態的,所以它不是的類可贖回,但實例類的。如果你希望能夠直接調用它,你需要

public static void Sandbox() 
{ 
    ... 
} 

而不能使用this

1

靜態方法存在於Class級別,可以將它們視爲全局函數。任何non static方法都是實例級別,正如名稱所暗示的,您只能在實例上執行instance方法。因此,通過實例化您創建實例的類,現在可以調用任何public方法。在你的例子中,你可以調用任何private方法或構造函數,因爲你正在創建你正在創建的類的實例。

相關問題