C# 構造函數
構造函數是一種特殊的方法,用於初始化對象。構造函數的優勢在於,在創建類的對象時調用它。它可以用於為字段設置初始值:
示例 獲取您自己的 C# 服務器
創建一個構造函數:
// 創建一個 Car 類
class Car
{
public string model; // 創建一個字段
// 為 Car 類創建一個類構造函數
public Car()
{
model = "Mustang"; // 為 model 設置初始值
}
static void Main(string[] args)
{
Car Ford = new Car(); // 創建一個 Car 類的對象(這將調用構造函數)
Console.WriteLine(Ford.model); // 打印 model 的值
}
}
輸出 "Mustang"
請注意,構造函數的名稱必須與類名匹配,並且不能有返回類型(如 void 或 int)。
還請注意,構造函數在創建對象時調用。
所有類默認都有構造函數:如果您自己不創建類構造函數,C# 會為您創建一個。然而,這樣您就無法為字段設置初始值。
構造函數參數
構造函數還可以接受參數,用於初始化字段。
下面的示例在構造函數中添加了一個字符串 modelName 參數。在構造函數內部,我們將 model 設置為 modelName(model=modelName)。當我們調用構造函數時,將參數傳遞給構造函數("Mustang"),這將將 model 的值設置為 "Mustang":
示例
class Car
{
public string model;
// 創建帶有參數的類構造函數
public Car(string modelName)
{
model = modelName;
}
static void Main(string[] args)
{
Car Ford = new Car("Mustang");
Console.WriteLine(Ford.model);
}
}
輸出 "Mustang"
您可以擁有任意數量的參數:
示例
class Car
{
public string model;
public string color;
public int year;
// 創建帶有多個參數的類構造函數
public Car(string modelName, string modelColor, int modelYear)
{
model = modelName;
color = modelColor;
year = modelYear;
}
static void Main(string[] args)
{
Car Ford = new Car("Mustang", "Red", 1969);
Console.WriteLine(Ford.color + " " + Ford.year + " " + Ford.model);
}
}
輸出 Red 1969 Mustang
提示:與其他方法一樣,構造函數可以通過使用不同數量的參數進行重載。
構造函數節省時間
沒有構造函數:
class Program
{
static void Main(string[] args)
{
Car Ford = new Car();
Ford.model = "Mustang";
Ford.color = "red";
Ford.year = 1969;
Car Opel = new Car();
Opel.model = "Astra";
Opel.color = "white";
Opel.year = 2005;
Console.WriteLine(Ford.model);
Console.WriteLine(Opel.model);
}
}
有構造函數:
class Program
{
static void Main(string[] args)
{
Car Ford = new Car("Mustang", "Red", 1969);
Car Opel = new Car("Astra", "White", 2005);
Console.WriteLine(Ford.model);
Console.WriteLine(Opel.model);
}
}
C# 訪問修飾符
到目前為止,您已經很熟悉我們許多示例中出現的 public 關鍵字:
public string color;
public 關鍵字是一個訪問修飾符,用於設置類、字段、方法和屬性的訪問級別/可見性。
C# 具有以下訪問修飾符:
| 修飾符 | 描述 |
|---|---|
public |
代碼可供所有類訪問 |
private |
代碼只能在同一類中訪問 |
protected |
代碼可以在同一類中訪問,或在從該類繼承的類中訪問 |
internal |
代碼只能在其自己的程序集中訪問,但不能從另一個程序集中訪問 |
還有兩種組合:protected internal 和 private protected。
現在,讓我們重點關注 public 和 private 修飾符。
private 修飾符
如果您使用 private 訪問修飾符聲明一個字段,則它只能在同一類中訪問:
示例
class Car
{
private string model = "Mustang";
static void Main(string[] args)
{
Car myObj = new Car();
Console.WriteLine(myObj.model);
}
}
輸出將是:
Mustang
如果您嘗試在類外部訪問它,將會發生錯誤:
示例
class Car
{
private string model = "Mustang";
}
class Program
{
static void Main(string[] args)
{
Car myObj = new Car();
Console.WriteLine(myObj.model);
}
}
輸出將是:
'Car.model' 由於其保護級別而無法訪問
字段“Car.model”已分配,但其值從未使用過
public 修飾符
如果您使用 public 訪問修飾符聲明一個字段,則它對所有類都可訪問:
示例
class Car
{
public string model = "Mustang";
}
class Program
{
static void Main(string[] args)
{
Car myObj = new Car();
Console.WriteLine(myObj.model);
}
}
輸出將是:
Mustang
為什麼要使用訪問修飾符?
- 控制類成員的可見性(每個單獨的類和類成員的安全級別)。
- 實現“封裝”——這是一個確保對用户隱藏“敏感”數據的過程。這是通過將字段聲明為
private來完成的
如果您不指定訪問修飾符,默認情況下,類的所有成員都是 private:
示例
class Car
{
string model; // private
string year; // private
}
C# 屬性(Get 和 Set)
在開始解釋屬性之前,您應該對“封裝”有一個基本的瞭解。
封裝的含義是確保對用户隱藏“敏感”數據。要實現這一點,您必須:
- 將字段/變量聲明為
private - 通過屬性提供
publicget和set方法來訪問和更新private字段的值
屬性
private 變量只能在同一類中訪問(外部類無法訪問它)。但是,有時我們需要訪問它們 - 這可以通過屬性來完成。
屬性就像是變量和方法的結合,它有兩個方法:get 方法和 set 方法:
示例
class Person
{
private string name; // 字段
public string Name // 屬性
{
get { return name; } // get 方法
set { name = value; } // set 方法
}
}
示例解釋
Name屬性與name字段相關聯。通常的做法是屬性和private字段使用相同的名稱,但首字母大寫。get方法返回name變量的值。set方法將一個值賦給name變量。value關鍵字表示我們賦給屬性的值。
使用屬性
現在我們可以使用 Name 屬性來訪問和更新 Person 類的 private 字段:
示例
class Person
{
private string name; // 字段
public string Name // 屬性
{
get { return name; }
set { name = value; }
}
}
class Program
{
static void Main(string[] args)
{
Person myObj = new Person();
myObj.Name = "Liam";
Console.WriteLine(myObj.Name);
}
}
輸出
Liam
自動屬性(簡寫)
C# 還提供了一種使用簡寫/自動屬性的方法,您無需為屬性定義字段,只需在屬性中編寫 get; 和 set;。
以下示例將產生與上述示例相同的結果。唯一的區別是代碼更少:
示例
class Person
{
public string Name // 屬性
{ get; set; }
}
為什麼要封裝?
- 更好地控制類成員(減少自己或他人搞亂代碼的可能性)
- 字段可以設為只讀(如果只使用
get方法),或只寫(如果只使用set方法) - 靈活:程序員可以更改代碼的一部分而不影響其他部分
- 提高數據安全性
最後
為了方便其他設備和平台的小夥伴觀看往期文章:
微信公眾號搜索:Let us Coding,關注後即可獲取最新文章推送
看完如果覺得有幫助,歡迎 點贊、收藏、關注