2011-06-08 68 views
1

我正在學習C#中的用戶控件,所以基本上我有一個叫做Books的類。在這個類中我有一個靜態方法public static string[] GetBooks(),這個方法返回書名。簡單程序的C#問題

public static string[] GetBooks() 
{ 
    return myBookList.ToArray(); 
} 

現在我有一個UserControl,我放在DataGrid,我希望能夠像做dataGrid.DataSource = Books.GetBooks();

問題是,intellisense沒有得到.GetBooks(),我認爲這是因爲它是靜態的,我想保持靜態。我該如何做到這一點,以及在哪裏做這個電話最好的地方?我假設在ascx的behing代碼文件中?

+1

myBookList聲明在哪裏?它也是靜態的嗎? – brien 2011-06-08 19:34:05

+0

是的,它是私人靜態列表 myBookList; – user710502 2011-06-08 19:56:26

回答

4

問題是智能感知沒有得到.GetBooks(),我認爲這是因爲它是靜態的,我想保持靜態。

爲什麼?這種方法是否是靜態的,也就是說,假設Books的所有實例共享相同的底層Book數據是否合理?如果不是,那麼它不應該是靜態的。

如果它應該是靜態的,那麼你需要引用它,像這樣(而不是使用實例引用)

var books = Books.GetBooks(); 

我假設你有這樣的事情現在:

var b = new Books(); 
var books = b.GetBooks(); // Won't work, as GetBooks is static, not an instance method 
+0

我完全理解,但如果它堅持保持靜態,儘管它沒有任何意義呢?我怎樣才能打電話給它,也應該從ascx文件的.cs中調用它嗎?圖書類是在App_Code – user710502 2011-06-08 19:35:28

+0

*「如果堅持讓它保持靜態,但它沒有意義呢?」*我真的不知道如何回答這個問題,或者什麼時候會這樣。爲什麼它會被迫成爲靜態的? – 2011-06-08 19:45:54

1

如果它是靜態的,並且是以發佈的方式進行的,即Books.GetBooks(),則檢查該類和後面的代碼是否位於相同的名稱空間中,或者是否聲明使用它。還要確保課堂圖書是公開的。如果它在App_Code中,請在屬性中設置Build Action = Compile。