2010-08-05 93 views
0

我在一個工具類呼叫實用工具類的函數

namespace GUI.code 
{ 
    public class Utility 
    { 
    public string GetFileName(string grpID) 
    { 
     string filenameUNC = "\\\\" + "localhost" + "\\AgentShare\\"; 

     string realPath = GetPath(filenameUNC); 

     return realPath; 
    } 
    } 
    } 

現在我從另一個調用頁面此功能在項目中像這樣有一個函數:

new utility.GetCSFileName(ID); 

爲什麼我需要添加新的,我爲什麼不能這樣稱呼它

GetCSFileName(ID); 

當我有

 using GUI.code; 

在頂部

如果刪除新我得到這個錯誤

錯誤1的對象引用是所必需的非靜態字段,方法或屬性「copiunGUI.code.GUIUtility。 GetCSFileName(串)

任何建議

回答

3

你可以打電話Utility.GetFileName()如果更改聲明public static string GetFileName(string grpID)

static意味着該成員共享Utility類的所有實例。請記住,c#是面向對象的語言的一個。非靜態成員稱爲實例成員,並且必須在該類的不同實例上調用。每次您撥打new Utility()時,您都會創建這樣一個實例,而且這種實例與其他實例不同。

當一個類的每個實例需要在內部維護信息(狀態)時,這非常有用。但是,如果特定成員不使用狀態數據 - 它接受參數,確實有效,並且可以返回結果 - 它可以聲明爲靜態。然後你怎麼稱呼它不是從實例變量,但是從類名稱本身(在這種情況下Utility.GetFileName()

當所有一類的成員是static,您可以添加static到類聲明本身。在這一點上,你將永遠無法調用new Utility(),這可能是你在這種情況下,想要的東西。

1

它看起來像你想標記你的方法(也可能是您的CLAS S還)爲靜態:

public static class Utility 
{ 
    public static string GetFileName(string grpID) 
    ... 

然後,你可以這樣調用:

string filename = Utility.GetFileName(ID); 
1

使該方法的靜態,你可以使用它,而該類

public static string GetFileName(string grpID) 
的實例210

用法:

Utility.GetCSFileName(ID); 
2

您需要將您的方法標記爲靜態。

public class Utility 
{ 
    public static string GetFileName(string grpID) 
    { 
      string filenameUNC = "\\\\" + "localhost" + "\\AgentShare\\"; 

      string realPath = GetPath(filenameUNC); 

      return realPath; 
    } 
} 

然後您將能夠調用你的方法與Utility.GetFileName(...)

瞭解更多關於靜態方法/類here

1

你不必有一個新的,如果您設置方法爲靜態方法:

public static string GetFileName(string grpID) 
{ 
//your code here 
} 

然後你還必須調用類的名字,但你不必實例化它:

因此而不是:
Utility util = new Utility(); util.GetFileName(「myString」);

你可以這樣做:

Utility.GetFileName("myString"); 

你不能做到這GetFileName("myString")的原因是你沒有從那裏它被定義的類中調用它。

1

當方法標記爲static關鍵字時,意味着您不必爲目標創建一個新的實例(使用'new')來調用該方法。

需要注意的一件事是,如果您將方法標記爲靜態方法,則無法調用任何非靜態方法,只能調用靜態方法。您也不能使用非靜態對象的任何屬性。

1

訣竅是將方法定義爲靜態。這將做到這一點:

namespace GUI.code 
{ 
    public class Utility 
    { 
    public static string GetFileName(string grpID) 
    { 
     string filenameUNC = "\\\\" + "localhost" + "\\AgentShare\\"; 

     string realPath = GetPath(filenameUNC); 

     return realPath; 
    } 
    } 
    } 

現在你可以寫utility.GetCSFileName(ID);。 但你還是要提一下。