動態

詳情 返回 返回

C# 面向對象編程進階:構造函數詳解與訪問修飾符應用 - 動態 詳情

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"

請注意,構造函數的名稱必須與類名匹配,並且不能有返回類型(如 voidint)。

還請注意,構造函數在創建對象時調用。

所有類默認都有構造函數:如果您自己不創建類構造函數,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 internalprivate protected

現在,讓我們重點關注 publicprivate 修飾符。

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
  • 通過屬性提供 public getset 方法來訪問和更新 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,關注後即可獲取最新文章推送

看完如果覺得有幫助,歡迎 點贊、收藏、關注

user avatar vanve 頭像 segmentfault 頭像 idcquan 頭像 qishiwohendou 頭像 evans_bo 頭像 kohler21 頭像 wu_cat 頭像 aipaobudeshoutao 頭像 java_study 頭像 tencent_blueking 頭像 vipstone 頭像 dns1 頭像
點贊 55 用戶, 點贊了這篇動態!
點贊

Add a new 評論

Some HTML is okay.