1.靜態成員、實例成員
1.1定義及說明
數據成員:
靜態成員:靜態成員變量是和類相關聯的,可以作為類中"共"有的變量(是一個共性的表現),他不依賴特定對象的存在,訪問的時候通過類名加點操作符加變量名來訪問.
實例成員:實例成員變量是和對象相關聯的,訪問實例成員變量依賴於實例的存在.
函數成員:
靜態方法:靜態方法是不屬於特定對象的方法,靜態方法可以訪問靜態成員變量和靜態方法;靜態方法不可以直接訪問實例變量和實例方法,可以間接調用,首先要創建一個類的實例,然後通過這一特定對象來調用靜態方法;
實例方法:一個實例方法的執行與特定對象關聯,他的執行需要一個對象存在。實例方法可以直接訪問靜態變量和實例變量,當多個實例對象存在時,內存中並不是存在美個特定的實例方法的拷貝,而是,相同類的所有對象都共享每個實例方法的一個拷貝(實例方法只占用“一套”空間)。
靜態方法和實例方法的訪問權限表
靜態成員變量 靜態方法 實例成員變量 實例方法 靜態方法 直接訪問 直接訪問 不可直接訪問 不可直接訪問 實例方法 直接訪問 直接訪問 直接訪問 直接訪問總之:實例方法的存在必須要有對象實例的存在,如果對象實例不存在,則實例方法也就沒有調用它的主人。靜態方法的存在前提是類的存在,所以無需聲明和New對象。
1.2代碼演示
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41class
Program
{
static
void
Main(
string
[] args)
{
Class1.CallObjectFunc();
//靜態調用
Console.WriteLine(Environment.NewLine);
Class1 tmpClass =
new
Class1();
//實例調用
tmpClass.ObjectFunc();
Console.ReadKey();
}
}
class
Class1
{
static
int
Class_m = 9;
//靜態成員
private
int
object_m = 8;
//實例成員
public
static
void
CallObjectFunc()
{
Console.WriteLine(
"------------靜態方法調用開始:"
);
Class1 class1 =
new
Class1();
class1.ObjectFunc();
Console.WriteLine(
"object_m:"
+ class1.object_m.ToString());
Console.WriteLine(
"------------靜態方法調用結束:"
);
}
public
void
ObjectFunc()
{
Console.WriteLine(
"實例方法調用開始:"
);
Console.WriteLine(
"Class_m:"
+ Class_m.ToString());
Console.WriteLine(
"實例方法調用結束:"
);
}
}
輸出結果:
2.靜態類
類可以聲明為 static 的,以指示它僅包含靜態成員。不能使用 new 關鍵字創建靜態類的實例。例如,創建一組不操作實例數據並且不與代碼中的特定對象關聯的方法是很常見的要求。您應該使用靜態類來包含那些方法。
靜態類的主要功能如下:
它們僅包含靜態成員。----函數成員和變量都必須有static修飾
它們不能被實例化。
它們是密封的。-----------編譯器編譯時自動生成sealed標記
它們不能包含實例構造函數。
因此創建靜態類與創建僅包含靜態成員和私有構造函數的類大致一樣。私有構造函數阻止類被實例化。
使用靜態類的優點在於,編譯器能夠執行檢查以確保不致偶然地添加實例成員。編譯器將保證不會創建此類的實利。
靜態類是密封的,因此不可被繼承。靜態類不能包含構造函數,但仍可聲明靜態構造函數以分配初始值或設置某個靜態狀態。
靜態類:
? 1 2 3 4 5static
class
CompanyInfo
{
public
static
string
GetCompanyName() {
return
"CompanyName"
; }
public
static
string
GetCompanyAddress() {
return
"CompanyAddress"
; }
}