物件 類 結構

2021-06-10 00:49:52 字數 4816 閱讀 5530

物件

物件是具有資料、行為和標識的程式設計結構。物件資料報含在物件的字段、屬性和事件中,物件行為則由物件的方法和介面定義。

物件具有標識 -- 資料集相同的兩個物件不一定是同一物件。

c# 中的物件通過classesstructs定義 -- 該型別的所有物件都按照它們構成的同一藍圖操作。

物件具有以下特點:

1、 c# 中使用的全都是物件,包括 windows 窗體和控制項。

2、 物件是例項化的;也就是說,物件是從類和結構所定義的模板中建立的。

3、 物件使用屬性(c# 程式設計指南)獲取和更改它們所包含的資訊。

4、 物件通常具有允許它們執行操作的方法和事件。

5、 所有 c# 物件都繼承自 object。

類是 c# 中功能最為強大的資料型別。像結構一樣,類也定義了資料型別的資料和行為。然後,程式設計師可以建立作為此類的例項的物件。與結構不同,類支援繼承,而繼承是物件導向程式設計的基礎部分。

類是使用 class 關鍵字來定義的,如下面的示例所示:

public

class customer

class關鍵字前面是訪問級別。在該例中,使用了 public,這表示任何人都可以基於該類建立物件。類的名稱位於class關鍵字的後面。定義的其餘部分是類的主體,用於定義行為和資料。類的字段、屬性、方法和事件統稱為「類成員」。

建立物件

儘管有時類和物件可互換,但它們是不同的概念。類定義物件的型別,但它不是物件本身。物件是基於類的具體實體,有時稱為類的例項。

通過使用 new 關鍵字,後跟物件將基於的類的名稱,可以建立物件,如下所示:

customer object1 = new customer();

建立類的例項後,將向程式設計師傳遞歸對該物件的引用。在上例中,object1 是對基於 customer 的物件的引用。此引用引用新物件,但不包含物件資料本身。實際上,可以在根本不建立物件的情況下建立物件引用:

customer object2;

建議不要建立像這樣的不引用物件的物件引用,因為在執行時通過這樣的引用來訪問物件的嘗試將會失敗。但是,可以建立這樣的引用來引用物件,方法是建立新物件,或者將它分配給現有的物件,如下所示:

customer object3 = new customer();

customer object4 = object3;

此**建立了兩個物件引用,它們引用同乙個物件。因此,通過 object3 對物件所做的任何更改都將反映在隨後使用的 object4 中。這是因為基於類的物件是按引用來引用的,因此類稱為引用型別。

類繼承

繼承是通過使用派生來實現的,而派生意味著類是使用基類宣告的,它的資料和行為從基類繼承。通過在派生的類名後面追加冒號和基類名稱,可以指定基類,如下所示:

public

class manager : employee

當類宣告基類時,為基類定義的所有類成員也成為新類的一部分。因為基類自身可能繼承自另乙個類,而後者又從另乙個類繼承,依此類推,最終類可能具有很多個基類。

public

class person

// method

public

void setname(string newname)

}class testperson}輸出

unknown

john smith

結構

結構是使用 struct 關鍵字定義的,例如:

public struct postaladdress

儘管結構的靜態字段可以初始化,結構例項字段宣告還是不能使用初始值設定項。

結構不能宣告預設建構函式(沒有引數的建構函式)或析構函式。

結構的副本由編譯器自動建立和銷毀,因此不需要使用預設建構函式和析構函式。實際上,編譯器通過為所有字段賦予預設值(參見預設值表)來實現預設建構函式。結構不能從類或其他結構繼承。

結構是值型別 -- 如果從結構建立乙個物件並將該物件賦給某個變數,變數則包含結構的全部值。複製包含結構的變數時,將複製所有資料,對新副本所做的任何修改都不會改變舊副本的資料。由於結構不使用引用,因此結構沒有標識 -- 具有相同資料的兩個值型別例項是無法區分的。c# 中的所有值型別本質上都繼承自 valuetype,後者繼承自 object。

結構具有以下特點:

結構是值型別,而類是引用型別。

向方法傳遞結構時,結構是通過傳值方式傳遞的,而不是作為引用傳遞的。

與類不同,結構的例項化可以不使用 new 運算子。

結構可以宣告建構函式,但它們必須帶引數。

乙個結構不能從另乙個結構或類繼承,而且不能作為乙個類的基。所有結構都直接繼承自system.valuetype,後者繼承自system.object

結構可以實現介面。

在結構中初始化例項欄位是錯誤的。

public struct coords

}宣告結構的預設(無引數)建構函式是錯誤的。總是提供預設建構函式以將結構成員初始化為它們的預設值。在結構中初始化例項欄位也是錯誤的。

如果使用 new 運算子建立結構物件,則會建立該結構物件,並呼叫適當的建構函式。與類不同,結構的例項化可以不使用new運算子。如果不使用new,則在初始化所有字段之前,欄位都保持未賦值狀態且物件不可用。

對於結構,不像類那樣存在繼承。乙個結構不能從另乙個結構或類繼承,而且不能作為乙個類的基。但是,結構從基類 object 繼承。結構可實現介面,其方式同類完全一樣。

下面的示例演示使用預設建構函式和引數化建構函式的struct初始化:

public struct coords

}// declare and initialize struct objects.

class testcoords

, y = ", coords1.x, coords1.y);

system.console.write("coords 2: ");

system.console.writeline("x = , y = ", coords2.x, coords2.y);}}

輸出coords 1: x = 0, y = 0

coords 2: x = 10, y = 10

下面舉例說明了結構特有的一種功能。它在不使用new運算子的情況下建立 coords 物件。如果將struct換成class,程式將不會編譯。

public struct coords

}// declare a struct object without "new."

class testcoordsnonew

, y = ", coords1.x, coords1.y);}}

輸出coords 1: x = 10, y = 20

繼承

類可以從其他類中繼承。這是通過以下方式實現的:在宣告類時,在類名稱後放置乙個冒號,然後在冒號後指定要從中繼承的類(即基類)。例如:

public

class a

}public

class b : a

}新類(即派生類)將獲取基類的所有非私有資料和行為以及新類為自己定義的所有其他資料或行為。因此,新類具有兩個有效型別:新類的型別和它繼承的類的型別。

使用 abstract 關鍵字可以建立僅用於繼承用途的類和類成員,即定義派生的非抽象類的功能。使用 sealed 關鍵字可以防止繼承以前標記為 virtual 的類或某些類成員。

可以將類宣告為抽象類。方法是在類定義中將關鍵字abstract置於關鍵字class的前面。例如:

public abstract class a

抽象類不能例項化。抽象類的用途是提供多個派生類可共享的基類的公共定義。例如,類庫可以定義乙個作為其多個函式的引數的抽象類,並要求程式設計師使用該庫通過建立派生類來提供自己的類實現。

抽象類也可以定義抽象方法。方法是將關鍵字abstract新增到方法的返回型別的前面。例如:

public abstract class a

抽象方法沒有實現,所以方法定義後面是分號,而不是常規的方法塊。抽象類的派生類必須實現所有抽象方法。當抽象類從基類繼承虛方法時,抽象類可以使用抽象方法重寫該虛方法。例如:

// compile with: /target:library

public

class d

}public abstract class e : d

public

class f : e

}如果將虛方法宣告為抽象方法,則它對於從抽象類繼承的所有類而言仍然是虛的。繼承抽象方法的類無法訪問該方法的原始實現。在前面的示例中,類 f 上的 dowork 無法呼叫類 d 上的 dowork。在此情況下,抽象類可以強制派生類為虛方法提供新的方法實現。

可以將類宣告為密封類。方法是在類定義中將關鍵字sealed置於關鍵字class的前面。例如:

public sealed class d

密封類不能用作基類。因此,它也不能是抽象類。密封類主要用於防止派生。由於密封類從不用作基類,所以有些執行時優化可以使對密封類成員的呼叫略快。

在對基類的虛成員進行重寫的派

物件 類和結構

物件具有以下特點 c 中使用的全都是物件,包括 windows 窗體和控制項。物件是例項化的 也就是說,物件是從類和結構所定義的模板中建立的。物件使用屬性 c 程式設計指南 獲取和更改它們所包含的資訊。物件通常具有允許它們執行操作的方法和事件。所有 c 物件都繼承自 object。類具有以下特點 類...

類 物件 結構體

類 是對某一類物件的抽象 物件 是某一種類的例項 類是抽象的,不占用記憶體,而物件是具體的,占用儲存空間。類的定義一般分為宣告部分和實現部分,當類的成員函式的函式體在類的外部定義時,必須由作用域運算子 來通知編譯系統該函式所屬的類。類中的資料成員的型別可以是任意的,但不允許對所定義的資料成員進行初始...

物件 類和結構

物件具有以下特點 c 中使用的全都是物件,包括 windows 窗體和控制項。物件是例項化的 也就是說,物件是從類和結構所定義的模板中建立的。物件使用屬性 c 程式設計指南 獲取和更改它們所包含的資訊。物件通常具有允許它們執行操作的方法和事件。所有 c 物件都繼承自 object。類具有以下特點 類...