最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

輕松學(xué)習(xí)C#的方法

 更新時間:2022年05月06日 10:33:44   投稿:lijiao  
輕松學(xué)習(xí)C#的方法,對C#的方法感興趣的朋友可以參考本篇文章,幫助大家更靈活的運(yùn)用C#的方法

在類中自定義的“函數(shù)”稱為“方法”,由于C#是完全面向?qū)ο蟮恼Z言,同時為了便于解釋后面要學(xué)的C#類,這里的“方法”來稱呼“函數(shù)”。

 方法是一種用于實(shí)現(xiàn)可以有對象或類執(zhí)行的計算機(jī)或操作的成員,是一個已命名的語句集。每個方法都有一個名稱和主體。方法名應(yīng)該是一個有意義的標(biāo)識符,應(yīng)描述出方法的用途。方法主體包含了調(diào)用方法時實(shí)際執(zhí)行的語句。用戶可以為大多數(shù)方法提供一些數(shù)據(jù)來進(jìn)行處理,并讓其返回一些信息(通常是處理結(jié)果)。方法是一種基本的,功能強(qiáng)大的編程機(jī)制。

方法的聲明格式為:

修飾符  返回值類型  方法名稱(參數(shù)列表)
        {
                 方法體
        }

其中的修飾符和參數(shù)列表都是可選的,修飾符如下:new,public,protected,internal,private,static,virtual,sealed,override,abstract,extern,partial

如果以下所有條件都為真,則所述的聲明就具有一個有效的修飾符組合

(1)該聲明包含一個由訪問修飾符組成的有效組合

(2)該聲明中所含的修飾符沒有彼此相同的

(3)該聲明最多包含下列修飾符中的一個:static,virtual和override

(4)該聲明最多包含下列修飾符中的一個:new和override

(5)如果聲明中包含abstract修飾符,則該聲明不包含下列任何修飾符:static,virtual,sealed或extern

(6)如果聲明中包含private修飾符,則該聲明不包含下列任何修飾符:virtual,override或abstract

(7)如果聲明包含sealed修飾符,則該聲明還包含override修飾符

(8)如果聲明中包含partial修飾符,則該聲明不包含下列任一修飾符:new,public,protected,internal,private,static,virtual,sealed,override,abstract,extern

返回值類型是一個類型名,它指定了返回的信息是什么類型。這可以是任何類型,如果要返回值,則在方法體運(yùn)行后必須由return語句返回一個和“返回值類型”相同類型的值,如果要寫一個不返回值的方法,那么必須用關(guān)鍵字void來取代返回類型。如果聲明包含partial修飾符,則返回類型必須為void。

一個方法的名稱必須不同于在一個類中聲明的所有其他非方法的名稱。此外,必須不同于在同一類中聲明的所有其他方法的簽名。在寫參數(shù)列表時,所有形參和類型形參都不能同名。

下面編寫一個簡單的返回兩個整型數(shù)的和的方法:      

public int add(int a, int b)
     {
         return a+b;
     }

下面就具體介紹C#語言中的一些重要的基礎(chǔ)的方法:

一、靜態(tài)方法和實(shí)例方法

靜態(tài)方法是一個特殊的成員方法,不屬于類的某一個具體的實(shí)例或?qū)ο?,而屬于類本身。靜態(tài)方法不對特定實(shí)例進(jìn)行操作,只能訪問類中的靜態(tài)成員。訪問靜態(tài)方法只能使用類名,而不需要創(chuàng)建對象,也不能使用對象名類引用,聲明靜態(tài)方法修飾符中必須有static關(guān)鍵字。

實(shí)例方法可以使用類的任何成員。調(diào)用實(shí)例方法時,必須使用類的實(shí)例或?qū)ο髞硪谩?shí)例方法對類的某個給定的實(shí)例進(jìn)行操作,在實(shí)例方法類中可以使用this來訪問實(shí)例。調(diào)用實(shí)例方法時,必須先創(chuàng)建一個對象。

簡單的說,靜態(tài)方法只能訪問靜態(tài)成員,實(shí)例方法可以訪問靜態(tài)和實(shí)例成員。之所以不允許靜態(tài)方法訪問實(shí)例成員變量,是因?yàn)閷?shí)例成員變量是屬于某個對象的,而靜態(tài)方法在執(zhí)行時,并不一定存在對象。同樣,因?yàn)閷?shí)例方法可以訪問實(shí)例成員變量,如果允許靜態(tài)方法調(diào)用實(shí)例方法,將間接地允許靜態(tài)方法使用實(shí)例成員變量,這是錯誤的。基于同樣的道理,靜態(tài)方法中不能使用關(guān)鍵字this。

例一、編程使用靜態(tài)方法和實(shí)例方法

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
 
namespace Text 
{ 
  class A 
  { 
    int exaVar;//創(chuàng)建的一個為實(shí)例成員變量 
    static int stVar;//創(chuàng)建的一個靜態(tài)成員變量 
    void tM()//實(shí)例方法 
    { 
      exaVar = 1;//等價于this.exVar=1 
      stVar = 1;//等價于A.stVar=1 
    } 
     static void sM()//靜態(tài)方法 
    { 
      //exaVar = 1;//錯誤,靜態(tài)方法不可以調(diào)用實(shí)例成員變量 
      stVar = 1;//等價于A.stVar=1 
    } 
    static void Main(string[] args) 
    { 
      A text = new A();//創(chuàng)建類A的對象為text 
      text.exaVar = 1;//對象text訪問實(shí)例成員變量 
      A.stVar = 1;//只能使用類訪問靜態(tài)成員變量 
      //text.stVar = 1;//不能使用對象text訪問靜態(tài)成員變量 
      text.tM();//使用對象text訪問實(shí)例成員方法 
      //text.sM();//不能使用對象text訪問靜態(tài)成員方法 
      A.sM();//使用類訪問靜態(tài)成員方法 
      Console.WriteLine(text.exaVar + A.stVar); 
      Console.ReadLine(); 
    } 
  } 
}

輸出的結(jié)果為:2

二、虛方法和非虛方法

若一個實(shí)例方法的聲明中含有virtual修飾符,則稱該方法為虛方法。若其中沒有virtual修飾符,則稱該方法為非虛方法。
非虛方法的實(shí)現(xiàn)是一成不變的,無論該方法是在聲明它的類的實(shí)例上調(diào)用還是在派生類的實(shí)例上調(diào)用,實(shí)現(xiàn)均相同。與此相反,虛方法的實(shí)現(xiàn)可以由派生類取代。取代所繼承的虛方法的實(shí)現(xiàn)的過程稱為重寫該方法。在虛方法調(diào)用中,該調(diào)用所涉及的那個實(shí)例運(yùn)行時類型確定了要被調(diào)用的究竟是該方法的哪一種實(shí)現(xiàn)。在非虛方法調(diào)用中,相關(guān)的實(shí)例的編譯時類型是決定性因素。

例二、使用虛方法和非虛方法在派生類中調(diào)用

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
 
namespace Text 
{ 
  public class A 
  { 
    public virtual void ab()//定義的類A的虛方法    </span> 
[csharp] view plaincopyprint?
<span style="font-size:18px;">    { 
      Console.WriteLine("這是虛方法"); 
    } 
    public void ac()//定義的類A的非虛方法 
    { 
      Console.WriteLine("這是非虛方法"); 
    } 
  } 
  public class B:A//類B私有繼承類A 
  { 
    public override void ab()//重寫繼承的ab方法 
</span>    <span style="font-size:18px;"> { 
      Console.WriteLine("這是新的方法"); 
    } 
    public new void ac()//創(chuàng)建一個新的方法覆蓋原來的ac方法 
    { 
      Console.WriteLine("這是另一個新的方法"); 
    } 
  } 
  class Program 
  { 
    static void Main(string[] args) 
    { 
      B b = new B();//創(chuàng)建類B的對象b 
      A a = b;//將對象b賦值給類A的對象a 
      a.ab();//調(diào)用原ab虛方法 
      b.ab();//調(diào)用ab方法 
      a.ac();//調(diào)用原ac非虛方法 
      b.ac();//調(diào)用ac方法 
      Console.ReadLine(); 
    } 
  } 
}

輸出的結(jié)果為:

 

從輸出的結(jié)果中可以看出虛方法的實(shí)現(xiàn)是由派生類取代并且由它的方法實(shí)現(xiàn),而非虛方法的實(shí)現(xiàn)是定義的類和派生類的各自由它們的方法實(shí)現(xiàn)。

三、虛方法和重寫方法

重寫方法用相同的簽名重寫所繼承的虛方法。虛方法聲明用于引入新方法,而重寫方法聲明則用于使現(xiàn)有的繼承虛方法專用化。用override聲明所重寫的那個方法稱為已重寫了的基方法。

重寫聲明和已重寫了的基方法具有相同的聲明可訪問性。換句話說,重寫聲明不能更改所對應(yīng)的 虛方法的可訪問性。但是,如果已重寫的基方法是protected,并且聲明它的程序集不是包含重寫方法的程序集,則重寫方法聲明的可訪問性必須是protected。

重寫override一般用于接口的實(shí)現(xiàn)和繼承類的方法改寫時應(yīng)注意:

(1)覆蓋的方法的標(biāo)志要和被覆蓋的方法的標(biāo)志完全匹配,才能達(dá)到覆蓋的效果
(2)覆蓋的方法的返回值必須和被覆蓋的方法的返回值一致
(3)覆蓋的方法所拋出的異常必須和被覆蓋的方法所拋出的異常一致,或者是其子類
(4)被覆蓋的方法不能為private,否則在其子類中只是新定義了一個方法,并沒有對其進(jìn)行覆蓋

例三、創(chuàng)建一個虛方法并重寫這個虛方法,通過調(diào)用兩個方法比較結(jié)果

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
 
namespace Text 
{ 
  class A 
  { 
    public virtual void a()//創(chuàng)建的虛方法 
    { 
      Console.WriteLine("這是虛方法"); 
    } 
  } 
  class B : A 
  { 
    public override void a() 
    { 
      Console.WriteLine("這是重寫后的方法"); 
</span>    } 
  } 
  <span style="font-size:18px;">class Program 
  { 
    static void Main(string[] args) 
    { 
      B b1 = new B();//創(chuàng)建類B的對象b1 
      b1.a();//調(diào)用重寫后的a方法 
      A a1 = new A();//創(chuàng)建類A的對象a1 
      a1.a();//調(diào)用虛方法a 
      A a2 = b1;//將類B的對象b1賦值給類A的對象a2 
      a2.a();//調(diào)用虛方法a 
      Console.ReadLine(); 
    } 
  } 
}

輸出的結(jié)果為:

這是重寫后的方法
這是虛方法
這是重寫后的方法

四、外部方法(這個方法很新奇,聯(lián)想到很多)

當(dāng)方法聲明包含extern修飾符時,稱該方法為外部方法。外部方法是在外部實(shí)現(xiàn)的,編程語言通常是使用C#以外的語言。外部方法不可以是泛型。

extern修飾符通常與DllImport屬性一起使用,從而使外部方法可以由DLL(動態(tài)鏈接庫)實(shí)現(xiàn)。執(zhí)行環(huán)境可以支持其他用來提供外部方法實(shí)現(xiàn)的機(jī)制。當(dāng)外部方法包含DllImport屬性時,該方法聲明必須同時包含一個static修飾符。

在使用DLLImport屬性時,一定要引入System.Runtime.InteropServices命名空間,此命名空間是提供各種各樣支持COM interop及平臺調(diào)用服務(wù)的成員。

例四、通過外部方法和Dlllmport屬性調(diào)用“User32.dll”實(shí)例自定義信息提示框的功能

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Runtime.InteropServices;//必須引入的命名空間 
namespace Text 
{ 
  class Program 
  { 
    [DllImport("User32.dll")]//調(diào)用User32.dll 
    public static extern int MessageBox(int H, string m, string c, int type);//定義的外部方法 
    static int Main(string[] args) 
    { 
      Console.Write("請輸入信息:"); 
      string str = Console.ReadLine();//接受輸入的信息 
      return MessageBox(0,str,"我的信息提示框",0);//以信息提示框輸出 
    } 
  } 
}

輸出的結(jié)果為:

 

五、分部方法

若一個方法聲明中含有partial修飾符,則稱該方法為分部方法。只能講分部方法聲明為分部類型的成員,而且要遵守約束數(shù)目。分部方法有著嚴(yán)格的限制。分部方法必須在分部類或分部機(jī)構(gòu)內(nèi)聲明。它們必須是私有的,不能返回值,不能有輸出參數(shù)。因?yàn)槿魏吾槍]有被實(shí)現(xiàn)的分部方法的調(diào)用都會簡單地被忽略,所以說這些限制是非常有必要的。

分部方法不能作為一個明確分配的變量,僅被代碼生成器在處理輕量級事件的時候使用。假設(shè)用戶解析一個數(shù)據(jù)庫或者一個XML文件,然后生成了數(shù)據(jù)類,結(jié)果會發(fā)現(xiàn)有數(shù)十個類,幾百個屬性以及一大堆泛型和模板文件等。分部方法另外一個經(jīng)常被用到的地方是驗(yàn)證,或者讓屬性的setter去更新另一個屬性。所以如果用戶要使用產(chǎn)生的代碼,或者在運(yùn)行時有幾百個事件和千個方法調(diào)用的話(其實(shí)大多數(shù)情況下只用到了其中的一點(diǎn)點(diǎn)),就可以選擇分部方法。分部方法在聲明和使用時要比事件容易得多,如果沒有用到它們,它們就會消失。從分部方法必須是私有的限制中,
Alexander發(fā)現(xiàn)了該方法的不足之處,即如果用戶喜歡原數(shù)據(jù)驅(qū)動的應(yīng)用,并且已經(jīng)被ASP.NET的數(shù)據(jù)綁定所困擾時(因?yàn)闆]有其他的方法可以附上原數(shù)據(jù)),那么,將來會出現(xiàn)丟失信息的可能。

例五、創(chuàng)建一個類的分部方法并且在另一個部分中引用

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
 
namespace Text 
{ 
  public partial class Program//定義的分部類 
  { 
    private int _setup;//定義的字段 
    public int setup//定義的方法 
    { 
      set 
      { 
        _setup=value; 
      } 
      get 
      { 
        return _setup; 
      } 
    } 
    partial void text(int t);//聲明分部方法 
    partial void text(int t)//實(shí)現(xiàn)聲明 
    { 
      t += _setup; 
      Console.Write(t); 
    } 
 
  } 
  partial class Program 
  { 
    static void Main(string[] args) 
    { 
      Program pg = new Program();//創(chuàng)建類對象 
      pg._setup = 100;//設(shè)置屬性 
      pg.text(50);//調(diào)用方法 
      Console.ReadLine(); 
    } 
  } 
}

輸出的結(jié)果為:150

以上就是關(guān)于C#的方法五個例題分析,希望對大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • c#如何使用UDP進(jìn)行聊天通信

    c#如何使用UDP進(jìn)行聊天通信

    這篇文章主要介紹了c#如何使用UDP進(jìn)行聊天通信問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • C#使用正則表達(dá)式實(shí)現(xiàn)常見的格式驗(yàn)證

    C#使用正則表達(dá)式實(shí)現(xiàn)常見的格式驗(yàn)證

    這篇文章主要為大家詳細(xì)介紹了C#如何使用正則表達(dá)式實(shí)現(xiàn)常見的格式驗(yàn)證,例如:電話號碼、密碼、郵編等,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • C#控制臺模擬電梯工作原理

    C#控制臺模擬電梯工作原理

    簡單的模擬一下電梯的運(yùn)行,電梯內(nèi)部和外部樓層呼叫的優(yōu)先級判斷。以前學(xué)硬件的時候做這個不成問題,現(xiàn)在用軟件來模擬對我來說比較難,要C#的圖形界面。求高手賜教。
    2015-06-06
  • C#中的HttpWebRequest類介紹

    C#中的HttpWebRequest類介紹

    本文詳細(xì)講解了C#中的HttpWebRequest類,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • WPF實(shí)現(xiàn)3D立方體波浪墻效果

    WPF實(shí)現(xiàn)3D立方體波浪墻效果

    這篇文章主要為大家詳細(xì)介紹了WPF實(shí)現(xiàn)3D立方體波浪墻效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • C# 調(diào)用WebApi的實(shí)現(xiàn)

    C# 調(diào)用WebApi的實(shí)現(xiàn)

    這篇文章主要介紹了C# 調(diào)用WebApi的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • C# 批量生成隨機(jī)密碼必須包含數(shù)字和字母并用加密算法加密

    C# 批量生成隨機(jī)密碼必須包含數(shù)字和字母并用加密算法加密

    這篇文章主要介紹了C# 批量生成隨機(jī)密碼必須包含數(shù)字和字母并用加密算法加密,需要的朋友參考下
    2017-01-01
  • unity 如何修改材質(zhì)屬性和更換shader

    unity 如何修改材質(zhì)屬性和更換shader

    這篇文章主要介紹了unity 修改材質(zhì)屬性和更換shader的操作方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • C#預(yù)處理器指令的用法實(shí)例分析

    C#預(yù)處理器指令的用法實(shí)例分析

    這篇文章主要介紹了C#預(yù)處理器指令的用法,以實(shí)例形式較為詳細(xì)的分析了預(yù)處理器指令的原理與相應(yīng)的用法,有助于深入理解C#程序的運(yùn)行原理,需要的朋友可以參考下
    2014-11-11
  • C# DES加密算法中向量的作用詳細(xì)解析

    C# DES加密算法中向量的作用詳細(xì)解析

    以下是對C#中DES加密算法中向量的作用進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下
    2013-09-09

最新評論

日喀则市| 宜黄县| 海原县| 合肥市| 寿光市| 连云港市| 修武县| 宿迁市| 翁源县| 昌宁县| 阳信县| 揭东县| 肃宁县| 巴彦淖尔市| 桦甸市| 阿鲁科尔沁旗| 大石桥市| 云梦县| 漳州市| 奇台县| 同仁县| 赣州市| 阜新市| 安新县| 长垣县| 新和县| 崇州市| 湾仔区| 峨眉山市| 依兰县| 金秀| 礼泉县| 景德镇市| 通海县| 东平县| 彭州市| 山东| 明水县| 仙游县| 大冶市| 前郭尔|