C#中不同類的類型
來源:易賢網 閱讀:1014 次 日期:2014-09-05 15:49:43
溫馨提示:易賢網小編為您整理了“C#中不同類的類型”,方便廣大網友查閱!

類類型是由字段數據(成員變量)和操作字段數據的成員(屬性、方法、構造函數、事件等)所構成的自定義類型。其中字段數據表示類實例(對象)的狀態(tài)。

在C#中,類使用class關鍵字定義,例如:

public class Car{

//Car的字段(狀態(tài))

private int _speed;

private string _name;

//Car操作字段的屬性

public int Speed

{

set {this._speed=value;}

get{return this._speed;}

}

public string Name

{

set { this._name=value;}

get{return this._name;}

}

//顯式定義默認構造函數

public Car(){}

//自定義構造函數

public Car(string name,int speed)

{

this._name=name;

this._speed=speed;

}

//Car的功能(方法)

public void ShowState()

{Console.WriteLine("Car {0} is going {1} MPH", this._name,this. _speed);}}

另:類的字段很少被定義為公開的,為了保護狀態(tài)數據的完整性,最好把字段數據定義為私有(或者受保護的),然后通過屬性對外提供受控制的訪問。

使用new關鍵字來分配對象

對象必須使用了new關鍵字來分配到內存,如果不是用new,而隨后嘗試使用類變量的話,會收到一個編譯錯誤。

public static void Main(string[] args){

//錯誤,忘記使用new

Car c;

c.Name="Bruce";}

正確的例子:

public static void Main(string[] args)

{

//創(chuàng)建Car對象。

Car c;//聲明了指向尚未創(chuàng)建的Car對象的引用。

c=new Car("bruce wong",150);//通過new把有效的引用賦給對象,這引用才會指向內存有效的對象。

c.ShowState();

Console.ReadKey(true); }?

類構造函數

作用:給對象的字段(狀態(tài))賦值,它允許在創(chuàng)建對象時創(chuàng)建其狀態(tài)。

構造函數是類特殊的方法,在使用new關鍵字創(chuàng)建對象時被間接調用。

注意:構造函數沒有返回值(即使是void),它的名字總是和類的名字一樣。

默認構造函數

C#提供一個默認的構造函數,需要時你可以重新定義,默認構造函數不接受任何參數。它把新的對象分配到內存和確保所有的字段都被設置為正確的默認值。當你對這些默認值不滿意,你可以重新定義默認構造函數。如:

public Car(){

this._name="My Car";

this._speed=100;}

那么每次使用new Car()都會創(chuàng)建狀態(tài)_name="My Car" _speed=100的Car對象。

自定義構造函數

作用:在創(chuàng)建對象時可以直接初始化對象的狀態(tài)。

public Car(string name,int speed)

{

this._name=name;

this._speed=speed;

}

注意:一旦定義了自定義函數,自帶的默認構造函數就自動從類移除(不能用默認構造函數創(chuàng)建對象了)。如果希望使用默認構造函數創(chuàng)建類對象,就必須顯式定義默認構造函數。

this關鍵字的作用

一、提供對當前實例的訪問。

可以解決傳入參數的名字與類型字段名字相同時產生的作用域歧義。例如:

class Car{

private string name;

public void SetName(string name)

{ this.name=name;}}

表示把參數name的值賦給本對象(實例)的字段name,this表示本實例。

二、參數傳遞。使用this進行串聯(lián)構造函數調用

使用一項名為構造函數鏈的技術來設計類。當類定義個了多個構造函數時,這個設計模式就會很有用。

由于構造函數通常會檢驗傳入的參數來強制各種業(yè)務規(guī)則,所以在類的構造函數集合中經常會找到冗余的驗證邏輯。

class Car{

public int Speed{get;set;}

public string Name{get;set;}

public Car(){}

public Car(int speed){if(speed>150){speed=150;}this.Speed=speed;}

public Car(string name){this.Name=name;}

public Car(int speed,string name){if(speed>150){speed=150;}this.Speed=speed;this.Name=name;}}

串聯(lián)構造函數方案:讓一個接受最多參數個數的構造函數做“主構造函數”,并實現(xiàn)必須的驗證邏輯。其余的構造函數使用this關鍵字把參數轉給主構造函數,并提供其他必需的參數。這樣,我們只關心主構造函數的邏輯,而其他構造函數體基本是空的了。

class Car{

public int Speed{get;set;}

public string Name{get;set;}

public Car(){}

public Car(int speed):this(speed,""){}

public Car(string name):this(0,name){}

// 主構造函數 public Car(int speed,string name)

{

if(speed>150) {speed=150;}

this.Speed=speed;

this.Name=name;

}}

使用this關鍵字串聯(lián)構造函數方式可以簡化編程任務,類定義更加容易維護、更更加簡明。但它不是強制使用的。

串聯(lián)構造函數的執(zhí)行順序:

1、調用構造函數把調用者提供的參數值轉發(fā)給主構造函數,并提供其他必須的初始化參數值。

2、執(zhí)行主構造函數。

3、執(zhí)行調用構造函數體的邏輯。

三、自定義索引器

class CarCollection:IEnumerable{

private ArrayList arCar=new ArrayList();

public Car this[int index]

{

get{ return (Car)arCar[index];}

set{arCar.Insert(index,value);}

}

//...}

static關鍵字

C#類(或者結構)可以使用static關鍵字來定義許多靜態(tài)成員。這些靜態(tài)成員只能從類級別而不能從對象級別上調用(調用靜態(tài)成員時不需要創(chuàng)建實例對象)。

例如:

//錯誤,WriteLine是靜態(tài)成員,是類級別的方法。Console c=new Console();c.WriteLine("Bruce Wong");//正確!WriteLine是類級別的方法Console.WriteLine("Bruce Wong");

注意:

一、靜態(tài)成員只能操作靜態(tài)數據或調用類的靜態(tài)成員。而非靜態(tài)成員可以操作實例數據與靜態(tài)數據(成員),因為靜態(tài)成員對類的所有實例都是可用的。

二、CLR把靜態(tài)數據分配到內存只進行一次,改變靜態(tài)數據將影響此類的所有實例。

定義靜態(tài)構造函數

構造函數用于在創(chuàng)建類對象時設置類對象的數據值。如果使用實例級別的構造函數給靜態(tài)數據賦值,你會驚奇的發(fā)現(xiàn)每次新建類對象時靜態(tài)數據的只都會被重置。所以我們要初始化靜態(tài)數據最好使用靜態(tài)構造函數。

靜態(tài)構造函數是特殊的構造函數,它非常適用于初始化在編譯時未知的靜態(tài)數據的值:

一、一個類(結構)只能定義一個靜態(tài)構造函數。

二、靜態(tài)構造函數不允許訪問修飾符并且不能接受任何參數。

三、無論創(chuàng)建多少個類實例,靜態(tài)函數知執(zhí)行一次。

四、CLR創(chuàng)建類實例或首次調用類靜態(tài)成員前,CLR會調用靜態(tài)構造函數。

五、靜態(tài)構造函數先于實例級別的其他構造函數執(zhí)行。

靜態(tài)類:一個類被定義為靜態(tài)的(使用static關鍵字修飾),就不能使用new關鍵字來創(chuàng)建類實例,靜態(tài)類只能包含用static標記的靜態(tài)類成員或字段。

PS:項目的應用程序對象(如定義Main()方法的類)通常定義為靜態(tài)類,以此來確保只包含靜態(tài)成員且不能被直接創(chuàng)建。如:

static class Program{

static void Main(string[] args)

{

//...

}}

更多信息請查看IT技術專欄

更多信息請查看網絡編程
易賢網手機網站地址:C#中不同類的類型

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
關于我們 | 聯(lián)系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網