在 C# 中,類別和物件是物件導向程式設計(Object-Oriented Programming, OOP)的核心概念。
類別用於定義物件的模板,而物件是根據這些模板創建的實例。
在 C# 中,可以使用 class 關鍵字定義類別。類別包含多種成員,包括屬性、方法、欄位、事件、建構子(建構函式)。
成員:一個類別可以包含多種成員,包括屬性、方法、欄位、事件、建構函式等。
欄位(Field):
欄位是類別中的變數,用於存儲資料。它們通常是私有的,只能在類別的內部訪問。
屬性(Property):
屬性用於定義類別的特性或資料成員,它們提供對私有欄位的存取方法。通常,屬性具有get和set方法,用於讀取和寫入相關欄位的值。
方法(Method):
方法用於定義類別的行為。它們包含一組執行的語句,可以在類別的實例上調用。
建構子/建構函式(Constructor):
建構函式用於初始化類別的實例。每個類別可以有一個或多個建構函式,它們在實例創建時自動調用。
class Person {
// 欄位
private string name;
private int age;
// 屬性
public string Name {
// 假設使用端都要顯示為大寫
get { return name.ToUpper(); }
// 確保 set進來的值沒餘空白
set { name = value.trim(); }
}
public int Age {
get { return age; }
set { age = value; }
}
}
class Person {
// 欄位
private int age;
public int Age {
get { return age; }
set { age = value; }
}
}
如果沒有其他操作,可以精簡為:
class Person {
public int Age { get; set; }
}
根據自動實作的屬性 (C# 程式設計手冊) 以及 Hell Kiki 大大補充
自動屬性實作,是C# compiler幫你生一個 _name 的field,所以你不寫,程式還是會產生那個欄位,property原來是保護資料的存取用的
class Person {
// 欄位
private string name;
// 屬性
public string Name {
// 假設使用端都要顯示為大寫
get { return name.ToUpper(); }
// 確保 set進來的值沒餘空白
set { name = value.trim(); }
}
// 自動屬性實作 (C# compiler幫你生一個 _name 的field)
public int Age { get; set; }
// 建構子
public Person(string name, int age) {
Name = name;
Age = age;
}
// 空的建構子
public Person() {;}
// 方法
public void SayHello() {
Console.WriteLine("你好,我叫 " + Name + ",今年 " + Age + " 歲。");
}
}
在這個範例中,我們定義了一個 Person 類別,
該類別有兩個屬性(Name 和 Age)和一個方法(SayHello)
和用來初始化 Person 物件的建構子。
要使用類別,首先必須創建它的物件實例。這可以通過使用 new 關鍵字來完成。
Person person1 = new Person();
這行代碼創建了一個 Person 類別的物件 person1。
你可以設定物件的屬性值。
person1.Name = "Alice";
person1.Age = 30;
或是使用建構子來初始化物件的屬性。
以上兩個步驟可以合成一個
// 使用建構子創建 Person 物件
Person person1 = new Person("Alice", 30);
person1.SayHello();
//"你好,我叫 Alice,今年 30 歲。"。
類別和物件範例:
以下是一個完整的 C# 範例,演示了如何定義類別、創建物件、設定屬性並調用方法:
PS. 以下例子修改建構子,舉例參數用同名的時候,可以如下使用
class Person {
public string Name { get; set; }
public int Age { get; set; }
// 建構子
// 這邊舉例如果參數用同名的時候,可以如下使用
public Person(string Name, int Age) {
this.Name = Name;
this.Age = Age;
}
// 空的建構子
public Person() {;}
public void SayHello() {
Console.WriteLine("你好,我叫 " + Name + ",今年 " + Age + " 歲。");
}
}
class Program {
static void Main() {
// 創建 Person 物件
Person person1 = new Person("Alice", 30);
// 調用物件方法
person1.SayHello();
}
}
這是一個簡單的範例,展示了如何定義類別、創建物件實例、設定屬性和調用方法。
類別和物件的使用使程式碼更具組織性,並支持物件導向的概念,如封裝、繼承和多型。
leetcode-1603. Design Parking System
以上的解法不是最好的,但可以依照上方的方法學習、練習,
並期望自己找到更好的方法,持續進步><
期望挑戰30天持續更新成功 ~ DAY5
常見的新手誤區,其實屬性(property)不是放資料的,是存取資料 或 讀寫資料的,放置資料的是欄位Field。
您好,剛剛看了您的連結
自動實作的屬性 (C# 程式設計手冊)
以下為我的理解
尚未自動屬性實作:
class Person {
// 欄位
private string name;
// 屬性
public string Name {
get { return name; }
set { name = value; }
}
}
自動屬性實作:
class Person {
// 屬性
public string Name {get; set; }
}
但我上方的文章 的確沒提到欄位的資訊
感謝大大告知 ,我再補充上去
自動屬性實作,是C# compiler幫你生一個 _name
的field,所以你不寫,程式還是會產生那個欄位,property原來是保護資料的存取用的:如
class Person {
// 欄位
private string name;
// 屬性
public string Name {
// 假設使用端都要顯示為大寫
get { return name.ToUpper(); }
// 確保 set進來的值沒餘空白
set { name = value.trim(); }
}
}
只是後來大家的getter/setter都只是基本 get/set 為了省麻煩C#才出語法糖自動實作簡化寫法。
所以有可能有欄位沒屬性,但基本上不會有屬性沒欄位。
希望有幫助理解。
太感謝大大了,學習到了,我稍會再將這些資訊補充到文章內
大感恩