iT邦幫忙

2023 iThome 鐵人賽

DAY 5
0
Software Development

C# 學習之路系列 第 6

[DAY5] C#基礎與實作(類別. 物件)

  • 分享至 

  • xImage
  •  

C# 程式基礎

在 C# 中,類別和物件是物件導向程式設計(Object-Oriented Programming, OOP)的核心概念。
類別用於定義物件的模板,而物件是根據這些模板創建的實例。

類別:

在 C# 中,可以使用 class 關鍵字定義類別。類別包含多種成員,包括屬性、方法、欄位、事件、建構子(建構函式)。

  • 成員:一個類別可以包含多種成員,包括屬性、方法、欄位、事件、建構函式等。

  • 欄位(Field):
    欄位是類別中的變數,用於存儲資料。它們通常是私有的,只能在類別的內部訪問。

  • 屬性(Property):
    屬性用於定義類別的特性或資料成員,它們提供對私有欄位的存取方法。通常,屬性具有get和set方法,用於讀取和寫入相關欄位的值。

  • 方法(Method):
    方法用於定義類別的行為。它們包含一組執行的語句,可以在類別的實例上調用。

  • 建構子/建構函式(Constructor):
    建構函式用於初始化類別的實例。每個類別可以有一個或多個建構函式,它們在實例創建時自動調用。

欄位 (Field) 與 屬性 (Properties):

  • 程式範例:
    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
https://ithelp.ithome.com.tw/upload/images/20230918/20163217FytkFQrvVT.png
  以上的解法不是最好的,但可以依照上方的方法學習、練習,
  並期望自己找到更好的方法,持續進步><

參考來源

  1. ChatGPT
  2. C#最強入門邁向頂尖高手之路王者歸來
  3. w3schools C#
  4. leetcode-1603. Design Parking System
  5. Day21-C#物件與類別
  6. Day22-C#-怎麼建立類別Class及其建構函式Constructor(建構子)、屬性 (Properties)、欄位 (Field)、方法 (Method)
  7. 成員 (C# 程式設計手冊)
  8. 自動實作的屬性 (C# 程式設計手冊)

期望挑戰30天持續更新成功 ~ DAY5


上一篇
[DAY4] C#基礎與實作(函式/方法)
下一篇
[DAY6] C#基礎與實作(繼承. 多型)
系列文
C# 學習之路31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
Hell Kiki
iT邦新手 4 級 ‧ 2023-09-19 13:03:36

常見的新手誤區,其實屬性(property)不是放資料的,是存取資料 或 讀寫資料的,放置資料的是欄位Field

CH iT邦新手 5 級 ‧ 2023-09-19 14:00:53 檢舉

您好,剛剛看了您的連結
自動實作的屬性 (C# 程式設計手冊)

以下為我的理解
尚未自動屬性實作:

    class Person {
        // 欄位
        private string name;

        // 屬性
        public string Name {
            get { return name; }
            set { name = value; }
        }
    }

自動屬性實作:

    class Person {
        // 屬性
        public string Name {get; set; }
    }

但我上方的文章 的確沒提到欄位的資訊
感謝大大告知 ,我再補充上去

Hell Kiki iT邦新手 4 級 ‧ 2023-09-19 14:42:26 檢舉

自動屬性實作,是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#才出語法糖自動實作簡化寫法。

所以有可能有欄位沒屬性,但基本上不會有屬性沒欄位。

希望有幫助理解。

CH iT邦新手 5 級 ‧ 2023-09-19 14:52:00 檢舉

太感謝大大了,學習到了,我稍會再將這些資訊補充到文章內
大感恩
/images/emoticon/emoticon32.gif

我要留言

立即登入留言