成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解C#中不同類的類型

開發(fā) 后端
今天我們將談到的是C#的類,類類型是由字段數(shù)據(jù)(成員變量)和操作字段數(shù)據(jù)的成員(屬性、方法、構(gòu)造函數(shù)、事件等)所構(gòu)成的自定義類型。

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

在C#中,類使用class關(guān)鍵字定義,例如:

  1. public class Car{     
  2. //Car的字段(狀態(tài))     
  3.  private int _speed;     
  4.  private string _name;   //Car操作字段的屬性     
  5.  public int Speed     
  6.  {          
  7. set {this._speed=value;}         
  8.  get{return this._speed;}     
  9.   }     
  10.  public string Name     
  11.  {        
  12.   set { this._name=value;}        
  13.   get{return this._name;}     
  14.   }    
  15.   //顯式定義默認構(gòu)造函數(shù)     
  16.  public Car(){}    //自定義構(gòu)造函數(shù)     
  17.  public Car(string name,int speed)    
  18.   {       
  19.    this._name=name;       
  20.    this._speed=speed;   
  21.    }     
  22.  //Car的功能(方法)    
  23.    public void ShowState()    
  24.    {Console.WriteLine("Car {0} is going {1} MPH"this._name,this. _speed);}} 

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

使用new關(guān)鍵字來分配對象

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

  1. public static void Main(string[] args){    
  2.   //錯誤,忘記使用new     
  3.  Car c;    
  4.   c.Name="Bruce";} 

正確的例子:

  1. public static void Main(string[] args)        {                       
  2.    //創(chuàng)建Car對象。         
  3.       Car c;//聲明了指向尚未創(chuàng)建的Car對象的引用。        
  4. c=new Car("bruce wong",150);//通過new把有效的引用賦給對象,這引用才會指向內(nèi)存有效的對象。        
  5.       c.ShowState();           
  6.    Console.ReadKey(true);       
  7.    } 

類構(gòu)造函數(shù)

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

構(gòu)造函數(shù)是類特殊的方法,在使用new關(guān)鍵字創(chuàng)建對象時被間接調(diào)用。

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

默認構(gòu)造函數(shù)

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

  1. public Car(){     
  2.  this._name="My Car";     
  3.  this._speed=100;} 

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

自定義構(gòu)造函數(shù)

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

  1. public Car(string name,int speed)    
  2.   {        this._name=name;       
  3.    this._speed=speed;    
  4.   } 

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

this關(guān)鍵字的作用

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

可以解決傳入?yún)?shù)的名字與類型字段名字相同時產(chǎn)生的作用域歧義。例如:

  1. class Car{   
  2.  private string name;  
  3.   public void SetName(string name)  
  4.  { this.name=name;}} 

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

二、參數(shù)傳遞。使用this進行串聯(lián)構(gòu)造函數(shù)調(diào)用

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

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

  1. class Car{    
  2.  public int Speed{get;set;}   
  3.   public string Name{get;set;}   
  4.   public Car(){}    
  5.  public Car(int speed){if(speed>150){speed=150;}this.Speed=speed;}    
  6.  public Car(string name){this.Name=name;}    
  7.  public Car(int speed,string name){if(speed>150){speed=150;}this.Speed=speed;this.Name=name;}} 

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

  1. class Car{   
  2.   public int Speed{get;set;}   
  3.   public string Name{get;set;}   
  4.   public Car(){}   
  5.   public Car(int speed):this(speed,""){}   
  6.   public Car(string name):this(0,name){}   // 主構(gòu)造函數(shù)   public Car(int speed,string name)  
  7.   {      
  8.    if(speed>150) {speed=150;}       this.Speed=speed;        
  9.  this.Name=name;    
  10.  }} 

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

串聯(lián)構(gòu)造函數(shù)的執(zhí)行順序:

1、調(diào)用構(gòu)造函數(shù)把調(diào)用者提供的參數(shù)值轉(zhuǎn)發(fā)給主構(gòu)造函數(shù),并提供其他必須的初始化參數(shù)值。

2、執(zhí)行主構(gòu)造函數(shù)。

3、執(zhí)行調(diào)用構(gòu)造函數(shù)體的邏輯。

三、自定義索引器

  1. class CarCollection:IEnumerable{     
  2. private ArrayList arCar=new ArrayList();    
  3.  public Car this[int index]   
  4.   {       
  5.  getreturn (Car)arCar[index];}      
  6.   set{arCar.Insert(index,value);}   
  7.   }   //...} 

static關(guān)鍵字

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

例如:

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

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

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

定義靜態(tài)構(gòu)造函數(shù)

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

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

一、一個類(結(jié)構(gòu))只能定義一個靜態(tài)構(gòu)造函數(shù)。

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

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

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

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

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

PS:項目的應(yīng)用程序?qū)ο螅ㄈ缍xMain()方法的類)通常定義為靜態(tài)類,以此來確保只包含靜態(tài)成員且不能被直接創(chuàng)建。如:

  1. static class Program{    
  2.    static void Main(string[] args)     
  3.  {       
  4.    //...    
  5.   }} 

原文鏈接:http://www.cnblogs.com/bruce-wong/archive/2011/03/29/1998424.html

【編輯推薦】

  1. 詳解C#中不同類的類型
  2. 淺談C#中標準Dispose模式的實現(xiàn)
  3. C#選擇正確的集合進行編碼
  4. C# 4.0新特性:協(xié)變與逆變中的編程思想
  5. C#應(yīng)用Attribute特性 代碼統(tǒng)計分析
責(zé)任編輯:彭凡 來源: 博客園
相關(guān)推薦

2011-04-12 11:46:26

Oracle優(yōu)化器

2011-04-11 13:08:13

對象鏈表C++

2009-08-14 17:09:48

C#引用類型

2010-07-01 16:12:10

UML組件圖

2010-12-16 10:54:07

SSL VPNVPN

2023-07-25 16:04:18

網(wǎng)絡(luò)電纜光纖

2009-01-19 10:26:02

C#Namespace.NET

2009-08-06 15:26:18

C#異常類型

2023-03-24 16:21:08

2023-09-27 07:13:59

Spring框架通信

2010-05-10 09:48:46

Oracle優(yōu)化器

2021-01-22 09:13:03

云計算邊緣計算機計算機硬件

2022-09-21 09:03:46

機密計算數(shù)據(jù)安全

2022-07-07 09:27:26

Syslinux加載程序

2009-08-03 14:54:23

值類型C#

2009-08-24 13:52:04

C# 泛型約束

2020-02-02 09:19:14

聊天機器人機器人智能

2020-08-27 07:00:00

游戲游戲測試測試技術(shù)

2023-03-06 09:17:37

數(shù)組類型jQuery

2023-04-14 14:54:29

點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日韩www视频 | 美女毛片 | 欧美一级做性受免费大片免费 | 九一精品| 最近中文字幕在线视频1 | 久久精品免费观看 | 国产高清免费 | 一级毛片在线播放 | 精品99久久 | 欧美a级成人淫片免费看 | 日韩在线观看中文字幕 | 成人免费在线 | 久www | 成人三级影院 | 日韩一区二区在线播放 | 亚洲三级av | 中文字幕一区二区三区精彩视频 | 日韩成人在线免费观看 | www国产成人免费观看视频,深夜成人网 | 久久91| 热re99久久精品国产99热 | 亚洲最新网址 | 欧美激情综合 | 亚洲图片一区二区三区 | 久久51| 国产乱码精品一区二区三区忘忧草 | 亚洲精品福利在线 | 亚洲精品乱码久久久久久久久久 | 亚洲三区在线播放 | 精品一区二区久久久久久久网站 | 欧美区日韩区 | 天天操天天摸天天干 | 国产日韩精品在线 | 亚洲精品视频在线看 | 欧美视频免费在线 | 91欧美精品成人综合在线观看 | 91精品国产综合久久久久 | 午夜伦理影院 | 青青久久av北条麻妃海外网 | 亚洲精品大全 | 国产色婷婷精品综合在线手机播放 |