簡體   English   中英

什么是C#中的“靜態方法”?

[英]What's a “static method” in C#?

將static關鍵字添加到方法時意味着什么?

public static void doSomething(){
   //Well, do something!
}

你可以將static關鍵字添加到類嗎? 那意味着什么?

與常規( 實例 )函數不同, static函數與類的實例無關。

static類是一個只能包含static成員的類,因此無法實例化。

例如:

class SomeClass {
    public int InstanceMethod() { return 1; }
    public static int StaticMethod() { return 42; }
}

要調用InstanceMethod ,您需要該類的實例:

SomeClass instance = new SomeClass();
instance.InstanceMethod();   //Fine
instance.StaticMethod();     //Won't compile

SomeClass.InstanceMethod();  //Won't compile
SomeClass.StaticMethod();    //Fine

從另一個角度來看:考慮您想對單個String進行一些更改。 例如,你想使字母大寫,等等。 為這些操作創建另一個名為“Tools”的類。 沒有制作“工具”類實例的意義,因為該類中沒有任何實體可用(與“人”或“教師”類相比)。 所以我們使用靜態關鍵字來使用“工具”類而不做任何實例,當你按類名后面的點(“工具”)時,你可以訪問你想要的方法。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(Tools.ToUpperCase("Behnoud Sherafati"));
        Console.ReadKey();
    }
}

public static class Tools
{
    public static string ToUpperCase(string str)
    {
        return str.ToUpper();

    }
}
}

即使沒有創建類的實例,靜態方法,字段,屬性或事件也可在類上調用。 如果創建了類的任何實例,則不能使用它們來訪問靜態成員。 只存在靜態字段和事件的一個副本,靜態方法和屬性只能訪問靜態字段和靜態事件。 靜態成員通常用於表示不響應對象狀態而改變的數據或計算; 例如,數學庫可能包含用於計算正弦和余弦的靜態方法。 靜態類成員在membe的返回類型之前使用static關鍵字聲明

很快你無法實例化靜態類:Ex:

static class myStaticClass
{
    public static void someFunction()
    { /* */ }
}

你不能這樣做:

myStaticClass msc = new myStaticClass();  // it will cause an error

你只能做:

myStaticClass.someFunction();

靜態函數意味着它與類(不是類的特定實例,而是類本身)相關聯,即使沒有類實例也可以調用它。

靜態類意味着該類僅包含靜態成員。

向方法添加“static”關鍵字時,意味着底層實現為類的任何實例提供相同的結果。 不用說,結果隨參數值的變化而變化

靜態變量不與類的對象鏈接。 可以使用classname訪問它。 該類的所有對象都將共享靜態變量。

通過將函數設置為靜態,它將限制該函數在該文件中的訪問。

static關鍵字應用於類時,會告訴編譯器創建該類的單個實例。 然后,不可能“新”一個或多個類的實例。 靜態類中的所有方法本身必須聲明為static。

有可能並且通常需要具有非靜態類的靜態方法。 例如,創建另一個類的實例時的工廠方法通常被聲明為static,因為這意味着不需要包含factor方法的類的特定實例。

有關如何,何時以及在何處查看MSDN的詳細說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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