[英]Do I need to make my class static to use a static method?
我有以下內容:
public class Sort
{
public static void ShuffleGenericList<T>(IList<T> list)
{
//generate a Random instance
Random rnd = new Random();
//get the count of items in the list
int i = list.Count();
...
...
}
}
我的類也應該是靜態的,還是只將方法靜態化就可以嗎?
將類標記為static
純粹是可選的(如果它們不包含擴展方法) 。
換句話說, 靜態類的成員也必須是靜態的 ,但通常可以在任何類中聲明靜態成員 :
// doesn't compile:
static class StaticClass {
void M() { }
}
// compiles:
class JustClass {
static void M1() { }
void M2() { }
}
根據常識,您應該 (但不必)在以下情況下將類標記為static
:
例如,取決於類中的內容,等等, new Sort()
在您的代碼中可能沒有任何意義,等等。從您提供的示例中,我認為將其標記為靜態是可行的方法。
但是請注意,當類包含要在代碼的其他部分中使用的擴展方法時, 必須將其標記為static
。 包含擴展方法的類必須是靜態的。
答案是該類不必是靜態的,但讓我們看一下這里的邏輯。
如果我們有一個排序類(一個實用程序類),則實例化它是沒有意義的。 那么為什么不將類設為靜態呢? 編程不只是最終結果,還在於使代碼可讀。
另一方面,為什么在非靜態類中會有靜態方法? 我沒有遇到過太多次了,但是很好的用途可能是您打算僅在該類中使用的實用程序函數。
該方法是靜態的就足夠了。
要測試,只需嘗試調用它:
Sort.ShuffleGenericList([some list])
可以公開一個類中的單個static
成員。
檢查這些MSDN鏈接以獲取詳細信息:
請注意,如果您將類本身標記為static
則無法再實例化它並使用整個應用程序中引用的多個副本-可以說,您只能將其限制為一站式服務。
對於Microsoft,靜態方法不必位於靜態類中。
http://msdn.microsoft.com/en-us/library/79b3xss3(v=vs.80).aspx
如果您的類沒有任何實例成員,而只有靜態方法,則應將其設為靜態。
您絕對沒有義務這樣做,代碼無需編譯就可以正常執行,但是將其標記為靜態具有一些優點,最重要的是您將無法錯誤地創建實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.