簡體   English   中英

我是否需要使我的類變為靜態才能使用靜態方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM