2011-03-07 99 views
1

我試圖做這樣的事情:如何從靜態函數中獲取/設置成員變量?

string strFirstName; 
string strSurname; 

public static bool MyItem(string FirstName, string Surname) 
{ 
    strFirstName = FirstName; //won't work obviously 
    strSurname = Surname; 
} 

private MyPrivateCode() 
{ 
    string MyPrivateFirstName = strFirstName; 
    string MyPrivateSurname = strSurname; 
} 

很顯然,這是行不通的。我需要「MyItem」爲公共靜態,因爲我需要能夠從另一個類訪問它。我在C#中編寫代碼。

+0

我想你可能會濫用'static'。你想要完成什麼? – SWeko 2011-03-07 07:39:51

+0

再次是一個「紅鯡魚」的實例!當然,你在這裏追逐一個錯誤的問題,請在這裏提出「真正」的問題/用例,而不是你認爲的解決方案的想法!! – 2011-03-07 08:53:01

回答

4

靜態方法只能引用靜態成員。將不同的數據與您的類的不同實例關聯的唯一方法是使用非靜態成員。靜態成員共享所有特定類的實例的相同數據。

的解決方案是通過其他類的實例此類(從中需要能夠訪問存儲在所述第一類中的數據中的一個),並訪問通過該實例需要的數據。

如果沒有更多關於您想要完成的信息的更多信息,很難做出更具體的說明。

1

MyItem是靜態的。所以你不能訪問一個對象的實例變量。

靜態方法只能訪問其他靜態變量。
其中的邏輯是,在運行時只有1個靜態方法,但可能是1000個對象實例,那麼如何知道誰的變量要使用?

static string strFirstName; 
static string strSurname; 

public static bool MyItem(string FirstName, string Surname) 
{ 
    strFirstName = FirstName; //won't work obviously 
    strSurname = Surname; 
} 
1

由於類的每個實例都將有自己的strFirstNamestrSurname,這將毫無意義,從一個靜態方法裏面設置:它不會是哪一個應設置清楚。

你需要或者寫

static string strFirstName; 
static string stdSurname; 

否則

public bool MyItem(string FirstName, string Surname) 

即使變量靜態的(這通常是沒有意義在這種情況下),或者使該方法非靜態(你可以也可以從「另一個類」中調用它,但您需要提供一個實例)

PS:另請注意,MyItem必須返回布爾值才能正確編譯。

相關問題