引用類型是類型安全的指針,它們的內存是分配在堆(保存指針地址)上的。
String、數組、類、接口和委托都是引用類型。
強制類型轉換與as類型轉換的區別:當類型轉換非法時,強制類型轉換將拋出一個System.InvalidCastException異常,
而as不會拋出異常,它返回一個null值。
用using創建別名:using console = System.Console;
訪問限定符:
public 該成員可以被其他任何類訪問
protected 該成員只能被其派生類訪問
private 該成員只能被本類的其他成員訪問
internal 該成員只能在當前編譯單元的其他成員訪問
帶參數列表和返回值的Main方法:
class Test
{
public static int Main(string[] args)
{
foreach (string arg in args)
{
...
}
}
}
構造函數(constructor)包括實例構造函數和靜態構造函數。
構造函數與類名相同,且不能有返回值。例:
class TestClass
{
TestClass() //實例構造函數:可以訪問靜態成員和實例成員,用於初始化實例成員
{
...
}
static TestClass() //靜態構造函數:只能訪問靜態成員,用於初始化靜態成員
{
...
}
}
類的靜態成員屬於類所有,不必生成實例就可以訪問,它是在載入包含類的應用程序時創建的,
但靜態方法不能訪問類的實例變量和方法。通常,靜態變量是在定義時就賦初始值的。
類的實例成員屬於類的實例所有,不創建實例對象就無法對其進行訪問,實例成員可以訪問類的
靜態成員和其它實例成員。
調用基類的析構函數:
class A
{
public A()
{
...
}
}
class B
{
public B(): base() //調用基類的析構函數
{
...
}
}
常量:其值是在編譯時設定的,必須是數值文字。默認狀態下常量是靜態的。例:
class A
{
public const double pi = 3.1415;
}
常量是編譯時就確定的值,只讀字段是在運行才能確定的值。比如運行時才能確定的屏幕分辨率。
只讀字段只能在類的析構函數中賦值。
靜態只讀字段:
class A
{
public static readonly int ScreenWidth; //靜態只讀字段
static A() //靜態析構函數
{
ScreenWidth = 1024; //在靜態析構函數中初始化
}
}
在類的繼承中,類的析構函數是不會被繼承的。
一個派生類只能從一個基類繼承,不能同時從多個基類繼承,但可以通過繼承多個接口來
達到相同目的。實現多繼承的唯一方法就是使用接口。例:
class MyFancyGrid: Control, ISerializable, IDataBound
{
...
}
密封類是不能繼承的類,抽象類不能被定義為密封類,且密封類的私有成員不能用protected修飾,
只能用private。例:
sealed class A
{
...
}
關鍵字ref和out用於指定用引用方式傳遞方法的參數。
它們的區別是:ref參數必須初始化,而out參數不需要初始化。所以在方法處理代碼依賴參數的
初始化值時使用ref,不依賴初始化值時使用out。
對out參數即使在傳遞前對其進行了初始化,其值也不會傳遞到方法處理函數內部。傳遞時系統
會將其設為未初始化。所以在方法內部必須對out參數進行初始化。