C#快速入門教程(3)——類的靜態成員和例項成員
我們在第1課中瞭解了類與例項的關係,即,當定義了某個類型別的物件時,這個物件就是此類的一個例項;那麼,什麼是例項成員呢?簡單的說,如果定義類的成員(如欄位、屬性、方法等)時,沒有使用static關鍵字,那麼,這些成員就是例項成員,公共的(public)例項成員只能通過類的例項(物件)來訪問,如car.DoorCount、car.Drive()等;如果使用程式碼CAuto.DoorCount引用DoorCount屬性就會出現錯誤。
下面,繼續在ConsoleTest專案中進行測試,選中“解決方案管理器”中的專案,如下圖所示。
然後,通過選單項“專案”>>“新增類”新增一個名為CAuto的類,如下圖所示。
接下來,修改CAuto.cs檔案的內容如下。
using System;
namespace ConsoleTest
{
public class CAuto
{
private int myDoorCount;
public int DoorCount
{
get { return myDoorCount; }
set
{
if (value >= 0 && value <= 5)
myDoorCount = value;
else
myDoorCount = 4;
}
}
//
public void Drive()
{
Console.WriteLine("行駛中...");
}
//
public void Return()
{
Console.WriteLine("倒車中...");
}
//
}
}
在CAuto類中,定義了三個公共的例項成員,分別是DoorCount屬性、Drive()和Return()方法。下面的程式碼,我們在Program.cs檔案中測試這個類的使用。
using System;
namespace ConsoleTest
{
class Program
{
static void Main(string[] args)
{
CAuto car = new CAuto();
car.DoorCount = 2;
Console.WriteLine("車門數量是{0}",car.DoorCount);
car.Drive();
car.Return();
}
}
}
使用鍵盤Ctrl+F5快捷鍵,可以看到如下圖所示的執行結果。
在類中定義類成員時使用static關鍵字,這個成員就是類的靜態成員,靜態成員可以通過類直接呼叫。我們新建一個名為CAutoFactory的類,修改其內容如下。
namespace ConsoleTest
{
public class CAutoFactory
{
public static int Counter { get; private set; }
//
public static CAuto Create(int doorCount)
{
Counter = Counter + 1;
CAuto auto = new CAuto();
auto.DoorCount = doorCount;
return auto;
}
//
}
}
在CAutoFactory類中,定義了一個Counter靜態屬性,用於記錄汽車物件的建立個數;一個Create()靜態方法,用於建立汽車物件,請注意,此方法使用了一個引數,用於指定車門數量。下面的程式碼,繼續在Program.cs檔案中修改程式碼來測試CAutoFactory類。
using System;
namespace ConsoleTest
{
class Program
{
static void Main(string[] args)
{
CAuto car1 = CAutoFactory.Create(2);
CAuto car2 = CAutoFactory.Create(4);
Console.WriteLine("建立汽車物件{0}個", CAutoFactory.Counter);
}
}
}
程式碼執行結果如下圖所示。
思考:為什麼在例項成員中可以呼叫靜態成員,而在靜態成員中不能呼叫例項成員。
本課的最後,瞭解一種簡化程式碼書寫的方式。下面兩段程式碼的功能是相同的,都是用於建立CAuto物件並設定DoorCount屬性,大家可以觀察、對比兩種方式的特點,並根據習慣和實際情況選擇使用。
public static CAuto Create(int doorCount)
{
CAuto auto = new CAuto();
auto.DoorCount = doorCount;
return auto;
}
和
public static CAuto Create(int doorCount)
{
return new CAuto()
{
DoorCount = doorCount
};
}
CHY軟體小屋原創作品!
相關文章
- C# 靜態成員與例項成員C#
- TypeScript 中 class 的例項成員與靜態成員TypeScript
- C#快速入門教程(4)——類成員的作用域C#
- C++類中的常成員和靜態成員C++
- c#物件導向- 靜態成員和非靜態成員的區別C#物件
- 靜態資料成員和靜態成員函式函式
- Java的靜態成員類Java
- C++類靜態成員C++
- c++類的靜態成員C++
- C++:類的靜態成員C++
- C++ 類的靜態成員C++
- c# 用反射獲得靜態類成員C#反射
- 對於靜態成員來說是類的建構函式,對於例項成員是類的原型物件。函式原型物件
- Python的靜態方法和類成員方法Python
- 類內的靜態成員函式函式
- worksheet類成員_c#C#
- 類的靜態成員變數和普通成員變數該怎樣去區別定義變數
- oop類的繼承與類靜態成員學習OOP繼承
- c++中的靜態成員C++
- (C#)利用反射動態呼叫類成員C#反射
- Effective Java 3rd 條目24 靜態成員類優於非靜態Java
- c#之arraylist類的成員C#
- java內部類之成員內部類例項Java
- C++類的靜態成員變數初始化C++變數
- C++ 靜態資料成員C++
- C++學習筆記(三):類與物件--靜態成員變數與常成員函式C++筆記物件變數函式
- python入門基礎(14)--類的屬性、成員方法、靜態方法以及繼承、過載Python繼承
- vue 快速入門 系列 —— 例項方法(或 property)和靜態方法Vue
- 類成員函式作為map容器的value使用例項函式
- c# 基類派生類成員方法訪問C#
- c#類的成員初始化順序C#
- 成員變數、全域性變數、例項變數、類變數、靜態變數和區域性變數的區別變數
- C# 8: 可變結構體中的只讀例項成員C#結構體
- 獨一無二----靜態成員變數 (轉)變數
- Java入門系列-12-成員方法Java
- C/C++返回內部靜態成員的陷阱薦C++
- 【python】類的特殊成員Python
- C++中的static成員、static const成員和const成員的初始化C++