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