溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C#字段、屬性、方法、委托

發(fā)布時(shí)間:2020-07-28 10:15:17 來源:網(wǎng)絡(luò) 閱讀:840 作者:jackeyone 欄目:編程語言

 

 在 C#中,類包含若干個(gè)組成成員,這些組成成員包括

字段、屬性、方法、事件等,

這些組成成員能 夠彼此協(xié)調(diào)用于對(duì)象的深入描述。

    1.字段 “字段”是包含在類中的對(duì)象的值, 字段使類可以封裝數(shù)據(jù), 字段的存儲(chǔ)可以滿足類設(shè)計(jì)中所需要描述。

    例如在 Animal 類中的字段 color,就是用來描述動(dòng)物的顏色。當(dāng)然, Animal 的特性不只顏色, 可以聲明多個(gè)字段描述 Animal 類的對(duì)象,示例代碼如下所示。

class Animal { public string color; //聲明顏色字段
               public bool haveFeather; //聲明是否含有羽毛字段
               public int age; //年齡字段
              }

上述代碼中,對(duì) Animal 類聲明了另外兩個(gè)字段,用來描述是否有羽毛和年齡。當(dāng)需要訪問該類的字 段的時(shí)候,需要聲明對(duì)象,并使用點(diǎn)“.”操作符實(shí)現(xiàn),Visual Studio 2008 中對(duì)“.”操作符有智能提示功 能,示例代碼如下所示。

   Animal bird = new Animal(); //創(chuàng)建對(duì)象
   bird.haveFeather = true; //鳥有羽毛
   bird.color = "black"; //這是一只黑色的鳥

2.屬性 C#中,屬性是類中可以像類的字段一樣訪問的方法。屬性可以為字段提供保護(hù),避免字段在用戶創(chuàng)建的對(duì)象不知情的情況下下被更改。屬性機(jī)制非常靈活,提供了讀取、編寫或計(jì)算私有字段的值, 可以像公共數(shù)據(jù)成員一樣使用屬性。

    在 C#中,它們被稱為“訪問器”,為 C#應(yīng)用程序中類的成員的訪問提供安全性保障。當(dāng)一個(gè)字段的 權(quán)限為私有(private)時(shí),不能通過對(duì)象的“.”操作來訪問,但是可以通過“訪問器”來訪問,示例代碼 如下所示。

    public class Animal { private int _age; //定義私有變量
    public int Age {

                     get { return _age; }
                     set { _age = value; }

                    } //賦值屬性 }

上述代碼中為 Animal 類聲明了一個(gè)屬性 Age,在主程序中,同樣可以通過“.”操作符來訪問屬性,示 例代碼如下所示。

     Animal bird = new Animal(); //創(chuàng)建對(duì)象
     bird.Age = 1; //Age 訪問了_age

    在 Visual Studio 2008 中,屬性的聲明被簡(jiǎn)化,不再需要冗長(zhǎng)的聲明,示例代碼如下所示。

public class Animal //創(chuàng)建類

   { public int Age
      { get; set; } //簡(jiǎn)便的屬性編寫
    }

注意:雖然在 VS2008 中,簡(jiǎn)化了代碼,但是實(shí)現(xiàn)的過程依舊沒有改變。

    3.方法 方法用來執(zhí)行類的操作,方法是一段小的代碼塊。在 C#中,方法接收輸入的數(shù)據(jù)參數(shù),并通過參數(shù) 執(zhí)行函數(shù)體,返回所需的函數(shù)值,方法的語法如下所示。

私有級(jí)別 返回類型 方法名稱(參數(shù) 1,參數(shù) 2) { 方法代碼塊。 }

    方法在類中聲明。對(duì)方法的聲明,需要指定訪問級(jí)別、返回值、方法名稱以及任何必要的參數(shù)。參 數(shù)在方法名稱后的括號(hào)中,多個(gè)參數(shù)用逗號(hào)分割,空括號(hào)表示無參數(shù),示例代碼如下所示。 public string output() //一個(gè)無參數(shù)傳遞的方法
   { return "沒有任何參數(shù)"; //返回字符串值 }

public string out_put(string output) //一個(gè)有參數(shù)傳遞的方法
{ return output; //返回參數(shù)的值 }

    上述代碼中,創(chuàng)建了兩個(gè)方法,一個(gè)是無參數(shù)傳遞方法 output 和一個(gè)參數(shù)傳遞的方out_put,在 主函數(shù)中可以調(diào)用該方法,調(diào)用代碼如下所示。

    Animal bird = new Animal(); //創(chuàng)建對(duì)象
    bird.out_put(); //使用無參數(shù)的方法
    string str = "我是一只鳥"; //創(chuàng)建字符串用于參數(shù)傳遞
    bird.out_put(str); //使用有參數(shù)的方法

    如上述代碼所示,主函數(shù)調(diào)用了一個(gè)方法 out_put,并傳遞了參數(shù)“我是一只鳥”。在使用類中的方法 前,將“我是一只鳥”賦值給變量 str,傳遞給 out_put 函數(shù)。在上述代碼中,“我是一只鳥”或者 str 都 可以作為參數(shù)。 在應(yīng)用程序開發(fā)中,方法和方法之間也可以互相傳遞參數(shù),一個(gè)方法可以作為另一個(gè)方法的參數(shù), 方法的參數(shù)還可以作為另一個(gè)方法的返回值,示例代碼如下所示。

public string output() //一個(gè)無參數(shù)傳遞的方法
{ return "沒有任何參數(shù)"; //返回字符串 }
public string out_put() //使用其他方法返回值的方法
{ string str = output(); //使用另一個(gè)方法的返回值
return str; //返回方法的返回值 }

    如上述代碼所示,out_put 使用了 output 方法,output 返回一個(gè)字符串“沒有任何參數(shù)”。在 out_put 方法中,使用了 output 方法,并將 output 方法的返回值賦給 str 局部變量,并返回局部變量。在方 法的編寫中,方法和方法之間可以使用同一個(gè)變量而互不影響,因?yàn)榉椒▋?nèi)部的變量是局部變量, 示例代碼如下所示。

public string output() //一個(gè)無參數(shù)傳遞的方法
{ string str = "沒有任何參數(shù)"; //聲明局部變量 str return str; //使用局部變量 str } public string out_put() //一個(gè)無參數(shù)傳遞的方法
{ string str = "還是沒有任何參數(shù)"; //聲明局部變量
str return str; //使用局部變量 str}

    如上述代碼所示,output 和 out_put 方法都沒有任何參數(shù),但是卻使用了同一個(gè)變量 str。str 是局部 變量,str 的作用范圍都在該變量聲明的方法內(nèi),稱作“作用域”。創(chuàng)建了一個(gè)方法,就必須指定該方 法是否有返回值。如果有返回值,則必須指定返回值的類型,示例代碼如下所示。

public int sum(int number1, int number2) //必須返回 int 類型的值
{ return number1 + number2; //返回一個(gè) int 類型的值 }
public void newsum(int number1, int number2) //void 表示無返回值
{ int sum = number1 + number2; //沒有返回值則不能返回值 }

    上述代碼中,聲明了兩個(gè)方法,分別為 sum 和 newsum。sum 方法中,聲明了該方法是共有的返回 值為 int 的方法,而 newsum 方法聲明了是共有的無返回值方法。

    4.事件 事件是一個(gè)對(duì)象向其他對(duì)象提供有關(guān)事件發(fā)生的通知的一種方式。在 C#中,事件是使用委托來定義 和觸發(fā)的。類或?qū)ο罂梢酝ㄟ^事件向其他類或?qū)ο笸ㄖl(fā)生的相關(guān)事情。發(fā)送或引發(fā)事件的類稱為 “發(fā)行者”, 接收或處理事件的類稱為“訂閱者”。 例如在 Web Form 中雙擊按鈕的過程, 就是一個(gè)事件, 控件并不對(duì)過程做描述,只是負(fù)責(zé)通知一個(gè)事件是否發(fā)生。事件具有以下特點(diǎn): 事件通常使用委托事件處理程序進(jìn)行聲明。 事件始終通知對(duì)象消息并指示需要執(zhí)行某種操作的一種方式。 發(fā)行者確定何時(shí)引發(fā)事件,訂閱者確定執(zhí)行何種操作來響應(yīng)該事件。 一個(gè)事件可以有多個(gè)訂閱者。一個(gè)訂閱者可處理來自多個(gè)發(fā)行者的多個(gè)事件。 沒有訂閱者的事件永遠(yuǎn)不會(huì)被調(diào)用。 事件通常用于通知用戶操作,例如,圖形用戶界面中的按鈕單擊或菜單選擇操作。 如果一個(gè)事件有多個(gè)訂閱者,當(dāng)引發(fā)該事件時(shí),會(huì)同步調(diào)用多個(gè)事件處理程序,也可以使用異步處 理多個(gè)事件。 聲明委托和事件的示例代碼如下所示。

public delegate void AnimalEventHandler(); //聲明委托
public class Animal//創(chuàng)建類
{ public event AnimalEventHandler OnFly; //聲明事件
public void Fly() //創(chuàng)建類的方法
{ OnFly(); //使用事件 }
}

    上述代碼定義了一個(gè)委托,并針對(duì)相關(guān)委托聲明了一個(gè)方法。關(guān)于委托和事件,會(huì)在后面的章節(jié)中 講到,上述代碼在主函數(shù)調(diào)用代碼如下所示。

Animal bird = new Animal(); //創(chuàng)建對(duì)象
bird.OnFly += new AnimalEventHandler(TestAnimal); //注冊(cè)事件
bird.Fly(); //使用方法

 

 

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI