免费男女视频_国产系列 视频二区_羞羞视频免费入口网站_久国久产久精永久网页_国产免费观看av_一区二区三区日韩在线观看

静态类和静态类成员(C# 编程指南)

Visual Studio 2015

 

靜態(tài)類與非靜態(tài)類基本相同,但存在一個區(qū)別:靜態(tài)類不能實(shí)例化。也就是說,不能使用 new 關(guān)鍵字創(chuàng)建靜態(tài)類類型的變量。因?yàn)闆]有實(shí)例變量,所以要使用類名本身訪問靜態(tài)類的成員。例如,如果名為 UtilityClass 的靜態(tài)類有一個名為 MethodA 的公共方法,則按下面的示例所示調(diào)用該方法:

C#

UtilityClass.MethodA();

對于只對輸入?yún)?shù)進(jìn)行運(yùn)算而不獲取或設(shè)置任何內(nèi)部實(shí)例字段的方法集,靜態(tài)類可以方便地用作這些方法集的容器。例如,在 .NET Framework 類庫中,靜態(tài)類System.Math 包含的方法只執(zhí)行數(shù)學(xué)運(yùn)算,而無需存儲或檢索特定 Math 類實(shí)例特有的數(shù)據(jù)。就是說,通過指定類名稱和方法名稱來應(yīng)用類成員,如下示例所述。

 

double dub = -3.14;
Console.WriteLine(Math.Abs(dub));
Console.WriteLine(Math.Floor(dub));
Console.WriteLine(Math.Round(Math.Abs(dub)));

// Output:
// 3.14
// -4
// 3


和所有類類型一樣,當(dāng)加載引用靜態(tài)類的程序時,.NET Framework 公共語言運(yùn)行時 (CLR) 將加載該靜態(tài)類的類型信息。程序不能指定加載靜態(tài)類的確切時間。但是,可以保證在程序中首次引用該類前加載該類,并初始化該類的字段并調(diào)用其靜態(tài)構(gòu)造函數(shù)。靜態(tài)構(gòu)造函數(shù)僅調(diào)用一次,在程序駐留的應(yīng)用程序域的生存期內(nèi),靜態(tài)類一直保留在內(nèi)存中。

System_CAPS_note注意

若要創(chuàng)建僅允許創(chuàng)建一個自身實(shí)例的非靜態(tài)類,請參見 Implementing Singleton in C#(在 C# 中實(shí)現(xiàn)單一實(shí)例)。

下表介紹靜態(tài)類的主要特性:

  • 僅包含靜態(tài)成員。

  • 無法實(shí)例化。

  • 是密封的。

  • 不能包含實(shí)例構(gòu)造函數(shù)。

因此,創(chuàng)建靜態(tài)類與創(chuàng)建僅包含靜態(tài)成員和私有構(gòu)造函數(shù)的類基本相同。私有構(gòu)造函數(shù)阻止類被實(shí)例化。使用靜態(tài)類的優(yōu)點(diǎn)在于,編譯器能夠執(zhí)行檢查以確保不致偶然地添加實(shí)例成員。編譯器將保證不會創(chuàng)建此類的實(shí)例。

靜態(tài)類是密封的,因此不可被繼承。它們不能從除 Object 外的任何類中繼承。靜態(tài)類不能包含實(shí)例構(gòu)造函數(shù),但可以包含靜態(tài)構(gòu)造函數(shù)。如果非靜態(tài)類包含需要進(jìn)行重要的初始化的靜態(tài)成員,也應(yīng)定義靜態(tài)構(gòu)造函數(shù)。有關(guān)更多信息,請參見 靜態(tài)構(gòu)造函數(shù)(C# 編程指南)。

下面是一個靜態(tài)類的示例,它包含兩個在攝氏溫度和華氏溫度之間執(zhí)行來回轉(zhuǎn)換的方法:

C#

public static class TemperatureConverter
{ public static double CelsiusToFahrenheit(string temperatureCelsius)
    { // Convert argument to double for calculations. double celsius = Double.Parse(temperatureCelsius); // Convert Celsius to Fahrenheit. double fahrenheit = (celsius * 9 / 5) + 32; return fahrenheit;
    } public static double FahrenheitToCelsius(string temperatureFahrenheit)
    { // Convert argument to double for calculations. double fahrenheit = Double.Parse(temperatureFahrenheit); // Convert Fahrenheit to Celsius. double celsius = (fahrenheit - 32) * 5 / 9; return celsius;
    }
} class TestTemperatureConverter
{ static void Main()
    {
        Console.WriteLine("Please select the convertor direction");
        Console.WriteLine("1. From Celsius to Fahrenheit.");
        Console.WriteLine("2. From Fahrenheit to Celsius.");
        Console.Write(":"); string selection = Console.ReadLine(); double F, C = 0; switch (selection)
        { case "1":
                Console.Write("Please enter the Celsius temperature: ");
                F = TemperatureConverter.CelsiusToFahrenheit(Console.ReadLine());
                Console.WriteLine("Temperature in Fahrenheit: {0:F2}", F); break; case "2":
                Console.Write("Please enter the Fahrenheit temperature: ");
                C = TemperatureConverter.FahrenheitToCelsius(Console.ReadLine());
                Console.WriteLine("Temperature in Celsius: {0:F2}", C); break; default:
                Console.WriteLine("Please select a convertor."); break;
        } // Keep the console window open in debug mode. Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
} /* Example Output:
    Please select the convertor direction
    1. From Celsius to Fahrenheit.
    2. From Fahrenheit to Celsius.
    :2
    Please enter the Fahrenheit temperature: 20
    Temperature in Celsius: -6.67
    Press any key to exit.
 */ 
靜態(tài)成員
 

非靜態(tài)類可以包含靜態(tài)的方法、字段、屬性或事件。即使沒有創(chuàng)建類的實(shí)例,也可以調(diào)用該類中的靜態(tài)成員。始終通過類名而不是實(shí)例名稱訪問靜態(tài)成員。無論對一個類創(chuàng)建多少個實(shí)例,它的靜態(tài)成員都只有一個副本。靜態(tài)方法和屬性不能訪問其包含類型中的非靜態(tài)字段和事件,并且不能訪問任何對象的實(shí)例變量(除非在方法參數(shù)中顯式傳遞)。

更常見的做法是聲明具有一些靜態(tài)成員的非靜態(tài)類,而不是將整個類聲明為靜態(tài)類。靜態(tài)字段有兩個常見的用法:一是記錄已實(shí)例化對象的個數(shù),二是存儲必須在所有實(shí)例之間共享的值。

靜態(tài)方法可以被重載但不能被重寫,因?yàn)樗鼈儗儆陬悾粚儆陬惖娜魏螌?shí)例。

雖然字段不能聲明為 static const,但 const 字段的行為在本質(zhì)上是靜態(tài)的。這樣的字段屬于類型,不屬于類型的實(shí)例。因此,可以同對待靜態(tài)字段一樣使用 ClassName.MemberName 表示法來訪問 const 字段。不需要對象實(shí)例。

C# 不支持靜態(tài)局部變量(在方法范圍內(nèi)聲明的變量)。

通過在成員的返回類型之前使用 static 關(guān)鍵字可以聲明靜態(tài)類成員,如下面的示例所示:

C#

public class Automobile
{ public static int NumberOfWheels = 4; public static int SizeOfGasTank
    { get { return 15;
        }
    } public static void Drive() { } public static event EventType RunOutOfGas; // Other non-static fields and properties... }

靜態(tài)成員在第一次被訪問之前并且在調(diào)用靜態(tài)構(gòu)造函數(shù)(如有存在)之前進(jìn)行初始化。若要訪問靜態(tài)類成員,應(yīng)使用類名而不是變量名來指定該成員的位置,如下面的示例所示:

C#

Automobile.Drive(); int i = Automobile.NumberOfWheels;

如果類包含靜態(tài)字段,請?zhí)峁┰诩虞d類時初始化這些字段的靜態(tài)構(gòu)造函數(shù)。

對靜態(tài)方法的調(diào)用以 Microsoft 中間語言 (MSIL) 生成調(diào)用指令,而對實(shí)例方法的調(diào)用生成 callvirt 指令,該指令還檢查 null 對象引用。但是,兩者之間的性能差異在大多數(shù)時候并不明顯。

C# 語言規(guī)范
 

 

有關(guān)詳細(xì)信息,請參閱 C# 語言規(guī)范。該語言規(guī)范是 C# 語法和用法的權(quán)威資料。

 
主站蜘蛛池模板: 日日碰日日操 | 国产精品视频2021 | 色天天综合网 | 91精品久久香蕉国产线看观看 | 永久免费在线观看av | 中文字幕在线观看二区 | 久久亚洲线观看视频 | 欧美精品a∨在线观看不卡 午夜精品影院 | 鲁人人人鲁人人鲁精品 | 婷婷亚洲一区二区三区 | 免费国产自久久久久三四区久久 | 天天草天天色 | 在线成人一区二区 | 亚洲精品无码不卡在线播放he | 美女性感毛片 | av免费片 | 国产精品夜色视频一级区 | 91福利国产在线观一区二区 | 草逼一区 | 青草久久网 | 国产精品久久av | 黄色网页在线观看 | 午夜视频免费播放 | 国产成年人小视频 | 亚洲第五色综合网 | 国产人成免费爽爽爽视频 | 日本成人一区二区 | 日韩精品久久久 | 久久精品视频1 | 毛片免费在线 | 最新av在线播放 | 亚洲精品一区二区三区免 | 最污网站| 影视免费观看 | 日韩激情 | 青青国产在线视频 | h久久| 国产精品片一区二区三区 | 成人在线视频在线观看 | 成人视屏在线 | 一级全毛片 |