類別簡介

參考型別

定義為的 class 類型是 class別。 在執行時間,當您宣告參考型別的變數時,該變數會包含值 null ,直到您使用 new 運算子明確建立類別的實例,或為它指派可能已在其他地方建立之相容型別的物件,如下列範例所示:

//Declaring an object of type MyClass.
MyClass mc = new MyClass();

//Declaring another object of the same type, assigning it the value of the first object.
MyClass mc2 = mc;

建立物件時,會在受控堆積上配置足夠的記憶體給該特定物件,而變數只會保留該物件位置的參考。 配置以及由 CLR 的自動記憶體管理功能 (也就是「記憶體回收」) 回收 Managed 堆積上的類型時,都需要額外負荷。 不過,記憶體回收也已獲得高度最佳化,因此在大部分情況下並不會產生效能問題。 如需記憶體回收的詳細資訊,請參閱自動記憶體管理和記憶體回收

宣告類別

類別是使用 class 關鍵字來宣告,後面接著唯一識別碼,如下列範例所示:

//[access modifier] - [class] - [identifier]
public class Customer
{
   // Fields, properties, methods and events go here...
}

class 關鍵字的前面會加上存取層級。 因為在此情況下會使用,所以 public 任何人都可以建立這個類別的實例。 類別的名稱遵循 class 關鍵字。 類別名稱必須是有效的 C# 識別碼名稱。 定義的其餘部分是定義行為和資料的類別主體。 類別上的欄位、屬性、方法和事件統稱為「類別成員」

建立物件

雖然它們有時會交換使用,但是類別和物件不同。 類別會定義一種類型的物件,但不是物件本身。 物件是根據類別的具體實體,而且有時稱為類別的執行個體。

您可以使用 new 關鍵字來建立物件,後面接著物件將依據的類別名稱,如下所示:

Customer object1 = new Customer();

建立類別的執行個體時,會將物件的參考傳回給程式設計人員。 在上述範例中,object1 是根據 Customer 之物件的參考。 這個參考參照新的物件,但不包含物件資料本身。 事實上,您可以建立物件參考,而根本不需要建立物件︰

 Customer object2;

我們不建議您建立物件參考,例如未參考物件的上一個物件參考,因為嘗試透過這類參考來存取物件將會在執行時間失敗。 不過,您可以藉由建立新的物件,或為其指派現有的物件(如下所示),來參考物件:

Customer object3 = new Customer();
Customer object4 = object3;

這個程式碼會建立同時參照相同物件的兩個物件參考。 因此,任何透過 object3 進行的物件變更都會反映在後續使用 object4 時。 因為以傳址方式參照根據類別的物件,所以類別稱為參考型別。

類別繼承

類別完全支援「繼承」,這是物件導向程式設計的基礎特性。 當您建立類別時,可以繼承自任何其他未定義為 sealed 的類別,而其他類別可以繼承自您的類別,並覆寫類別虛擬方法。 此外,您可以執行一或多個介面。

使用「衍生」可完成繼承,這表示使用從中繼承資料和行為的「基底類別」來宣告類別。 附加冒號以及接著衍生類別名稱後面的基底類別名稱,以指定基底類別,與下面類似:

public class Manager : Employee
{
    // Employee fields, properties, methods and events are inherited
    // New Manager fields, properties, methods and events go here...
}

類別宣告基底類別時,會繼承基底類別的所有成員,但建構函式除外。 如需詳細資訊,請參閱繼承

C # 中的類別只能直接繼承自一個基類。 不過,因為基底類別本身可以繼承自另一個類別,所以類別可能會間接繼承多個基底類別。 此外,類別可以直接執行一或多個介面。 如需詳細資訊,請參閱介面

可以 abstract 宣告類別。 抽象類別包含具有簽章定義但沒有實作的抽象方法。 無法具現化抽象類別。 它們僅用於實作抽象方法的衍生類別。 相較之下,sealed 類別不允許從它衍生其他類別。 如需詳細資訊,請參閱 抽象和密封類別和類別成員

類別定義可以在不同的原始程式檔之間進行分割。 如需詳細資訊,請參閱部分類別和方法

範例

下列範例定義了一個公用類別,其中包含自動實作屬性、方法以及稱為建構函式的特殊方法。 如需詳細資訊,請參閱屬性方法和函式文章。 然後使用 new 關鍵字具現化類別的執行個體。

using System;

public class Person
{
    // Constructor that takes no arguments:
    public Person()
    {
        Name = "unknown";
    }

    // Constructor that takes one argument:
    public Person(string name)
    {
        Name = name;
    }

    // Auto-implemented readonly property:
    public string Name { get; }

    // Method that overrides the base class (System.Object) implementation.
    public override string ToString()
    {
        return Name;
    }
}
class TestPerson
{
    static void Main()
    {
        // Call the constructor that has no parameters.
        var person1 = new Person();
        Console.WriteLine(person1.Name);

        // Call the constructor that has one parameter.
        var person2 = new Person("Sarah Jones");
        Console.WriteLine(person2.Name);
        // Get the string representation of the person2 instance.
        Console.WriteLine(person2);
    }
}
// Output:
// unknown
// Sarah Jones
// Sarah Jones

C# 語言規格

如需詳細資訊,請參閱 c # 語言規格。 語言規格是 C# 語法及用法的限定來源。