亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

輕松學習C#的方法

2020-01-24 01:21:57
字體:
來源:轉載
供稿:網友

       在類中自定義的“函數”稱為“方法”,由于C#是完全面向對象的語言,同時為了便于解釋后面要學的C#類,這里的“方法”來稱呼“函數”。
       方法是一種用于實現可以有對象或類執行的計算機或操作的成員,是一個已命名的語句集。每個方法都有一個名稱和主體。方法名應該是一個有意義的標識符,應描述出方法的用途。方法主體包含了調用方法時實際執行的語句。用戶可以為大多數方法提供一些數據來進行處理,并讓其返回一些信息(通常是處理結果)。方法是一種基本的,功能強大的編程機制。
       方法的聲明格式為:
       修飾符  返回值類型  方法名稱(參數列表)
        {
                 方法體
        }
       其中的修飾符和參數列表都是可選的,修飾符如下: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
        返回值類型是一個類型名,它指定了返回的信息是什么類型。這可以是任何類型,如果要返回值,則在方法體運行后必須由return語句返回一個和“返回值類型”相同類型的值,如果要寫一個不返回值的方法,那么必須用關鍵字void來取代返回類型。如果聲明包含partial修飾符,則返回類型必須為void。
        一個方法的名稱必須不同于在一個類中聲明的所有其他非方法的名稱。此外,必須不同于在同一類中聲明的所有其他方法的簽名。在寫參數列表時,所有形參和類型形參都不能同名。
        下面編寫一個簡單的返回兩個整型數的和的方法:      

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

下面就具體介紹C#語言中的一些重要的基礎的方法:
一、靜態方法和實例方法
      靜態方法是一個特殊的成員方法,不屬于類的某一個具體的實例或對象,而屬于類本身。靜態方法不對特定實例進行操作,只能訪問類中的靜態成員。訪問靜態方法只能使用類名,而不需要創建對象,也不能使用對象名類引用,聲明靜態方法修飾符中必須有static關鍵字。
       實例方法可以使用類的任何成員。調用實例方法時,必須使用類的實例或對象來引用。實例方法對類的某個給定的實例進行操作,在實例方法類中可以使用this來訪問實例。調用實例方法時,必須先創建一個對象。
       簡單的說,靜態方法只能訪問靜態成員,實例方法可以訪問靜態和實例成員。之所以不允許靜態方法訪問實例成員變量,是因為實例成員變量是屬于某個對象的,而靜態方法在執行時,并不一定存在對象。同樣,因為實例方法可以訪問實例成員變量,如果允許靜態方法調用實例方法,將間接地允許靜態方法使用實例成員變量,這是錯誤的。基于同樣的道理,靜態方法中不能使用關鍵字this。
例一、編程使用靜態方法和實例方法

<span style="font-size:18px;">using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;  namespace Text {   class A   {     int exaVar;//創建的一個為實例成員變量     static int stVar;//創建的一個靜態成員變量     void tM()//實例方法     {       exaVar = 1;//等價于this.exVar=1       stVar = 1;//等價于A.stVar=1     }      static void sM()//靜態方法     {       //exaVar = 1;//錯誤,靜態方法不可以調用實例成員變量       stVar = 1;//等價于A.stVar=1     }     static void Main(string[] args)     {       A text = new A();//創建類A的對象為text       text.exaVar = 1;//對象text訪問實例成員變量       A.stVar = 1;//只能使用類訪問靜態成員變量       //text.stVar = 1;//不能使用對象text訪問靜態成員變量       text.tM();//使用對象text訪問實例成員方法       //text.sM();//不能使用對象text訪問靜態成員方法       A.sM();//使用類訪問靜態成員方法       Console.WriteLine(text.exaVar + A.stVar);       Console.ReadLine();     }   } }</span> 

輸出的結果為:2
二、虛方法和非虛方法
       若一個實例方法的聲明中含有virtual修飾符,則稱該方法為虛方法。若其中沒有virtual修飾符,則稱該方法為非虛方法。
       非虛方法的實現是一成不變的,無論該方法是在聲明它的類的實例上調用還是在派生類的實例上調用,實現均相同。與此相反,虛方法的實現可以由派生類取代。取代所繼承的虛方法的實現的過程稱為重寫該方法。在虛方法調用中,該調用所涉及的那個實例運行時類型確定了要被調用的究竟是該方法的哪一種實現。在非虛方法調用中,相關的實例的編譯時類型是決定性因素。
例二、使用虛方法和非虛方法在派生類中調用

<span style="font-size:18px;">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()//創建一個新的方法覆蓋原來的ac方法     {       Console.WriteLine("這是另一個新的方法");     }   }   class Program   {     static void Main(string[] args)     {       B b = new B();//創建類B的對象b       A a = b;//將對象b賦值給類A的對象a       a.ab();//調用原ab虛方法       b.ab();//調用ab方法       a.ac();//調用原ac非虛方法       b.ac();//調用ac方法       Console.ReadLine();     }   } }</span> 

輸出的結果為:

 

       從輸出的結果中可以看出虛方法的實現是由派生類取代并且由它的方法實現,而非虛方法的實現是定義的類和派生類的各自由它們的方法實現。
三、虛方法和重寫方法
       重寫方法用相同的簽名重寫所繼承的虛方法。虛方法聲明用于引入新方法,而重寫方法聲明則用于使現有的繼承虛方法專用化。用override聲明所重寫的那個方法稱為已重寫了的基方法。
        重寫聲明和已重寫了的基方法具有相同的聲明可訪問性。換句話說,重寫聲明不能更改所對應的 虛方法的可訪問性。但是,如果已重寫的基方法是protected,并且聲明它的程序集不是包含重寫方法的程序集,則重寫方法聲明的可訪問性必須是protected。
        重寫override一般用于接口的實現和繼承類的方法改寫時應注意:
        (1)覆蓋的方法的標志要和被覆蓋的方法的標志完全匹配,才能達到覆蓋的效果
        (2)覆蓋的方法的返回值必須和被覆蓋的方法的返回值一致
        (3)覆蓋的方法所拋出的異常必須和被覆蓋的方法所拋出的異常一致,或者是其子類
        (4)被覆蓋的方法不能為private,否則在其子類中只是新定義了一個方法,并沒有對其進行覆蓋
例三、創建一個虛方法并重寫這個虛方法,通過調用兩個方法比較結果

<span style="font-size:18px;">using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;  namespace Text {   class A   {     public virtual void a()//創建的虛方法     {       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();//創建類B的對象b1       b1.a();//調用重寫后的a方法       A a1 = new A();//創建類A的對象a1       a1.a();//調用虛方法a       A a2 = b1;//將類B的對象b1賦值給類A的對象a2       a2.a();//調用虛方法a       Console.ReadLine();     }   } } </span> 

輸出的結果為:這是重寫后的方法
                       這是虛方法
                       這是重寫后的方法
四、外部方法(這個方法很新奇,聯想到很多)
        當方法聲明包含extern修飾符時,稱該方法為外部方法。外部方法是在外部實現的,編程語言通常是使用C#以外的語言。外部方法不可以是泛型。
        extern修飾符通常與DllImport屬性一起使用,從而使外部方法可以由DLL(動態鏈接庫)實現。執行環境可以支持其他用來提供外部方法實現的機制。當外部方法包含DllImport屬性時,該方法聲明必須同時包含一個static修飾符。
        在使用DLLImport屬性時,一定要引入System.Runtime.InteropServices命名空間,此命名空間是提供各種各樣支持COM interop及平臺調用服務的成員。
例四、通過外部方法和Dlllmport屬性調用“User32.dll”實例自定義信息提示框的功能

<span style="font-size:18px;">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")]//調用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);//以信息提示框輸出     }   } }</span> 

輸出的結果為:

 

五、分部方法
        若一個方法聲明中含有partial修飾符,則稱該方法為分部方法。只能講分部方法聲明為分部類型的成員,而且要遵守約束數目。分部方法有著嚴格的限制。分部方法必須在分部類或分部機構內聲明。它們必須是私有的,不能返回值,不能有輸出參數。因為任何針對沒有被實現的分部方法的調用都會簡單地被忽略,所以說這些限制是非常有必要的。
        分部方法不能作為一個明確分配的變量,僅被代碼生成器在處理輕量級事件的時候使用。假設用戶解析一個數據庫或者一個XML文件,然后生成了數據類,結果會發現有數十個類,幾百個屬性以及一大堆泛型和模板文件等。分部方法另外一個經常被用到的地方是驗證,或者讓屬性的setter去更新另一個屬性。所以如果用戶要使用產生的代碼,或者在運行時有幾百個事件和千個方法調用的話(其實大多數情況下只用到了其中的一點點),就可以選擇分部方法。分部方法在聲明和使用時要比事件容易得多,如果沒有用到它們,它們就會消失。從分部方法必須是私有的限制中,
Alexander發現了該方法的不足之處,即如果用戶喜歡原數據驅動的應用,并且已經被ASP.NET的數據綁定所困擾時(因為沒有其他的方法可以附上原數據),那么,將來會出現丟失信息的可能。
例五、創建一個類的分部方法并且在另一個部分中引用

<span style="font-size:18px;">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)//實現聲明     {       t += _setup;       Console.Write(t);     }    }   partial class Program   {     static void Main(string[] args)     {       Program pg = new Program();//創建類對象       pg._setup = 100;//設置屬性       pg.text(50);//調用方法       Console.ReadLine();     }   } }</span> 

輸出的結果為:150

以上就是關于C#的方法五個例題分析,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人精品一区二区三区电影免费| 日韩国产欧美精品在线| 国产精品69精品一区二区三区| 国产婷婷成人久久av免费高清| 亚洲视频在线免费观看| 久久久久久久影院| 欧美激情精品久久久久久大尺度| 欧美激情第99页| 欧美情侣性视频| 中文在线资源观看视频网站免费不卡| 成人激情视频在线播放| 成人精品视频99在线观看免费| 性视频1819p久久| 国产美女直播视频一区| 欧美激情免费视频| 欧美国产日韩在线| 亚洲免费电影在线观看| 中文字幕日韩av| 88国产精品欧美一区二区三区| 欧美电影免费播放| 亚洲一区二区久久久久久| 亚洲一区二区三区成人在线视频精品| 国产日韩av高清| 高清欧美性猛交| 中文字幕免费精品一区高清| 亚洲精品电影网站| 日本欧美爱爱爱| 久久99久久亚洲国产| 亚洲成人久久电影| 国产精品福利在线| 国产精品视频精品视频| 精品中文字幕久久久久久| 亚洲国产小视频在线观看| 精品国产一区二区三区在线观看| 日韩在线资源网| 久久久久久免费精品| 色综合伊人色综合网| 国产视频精品xxxx| 最近2019中文字幕大全第二页| 91久久久久久久| 亚洲欧美日韩天堂一区二区| 日韩中文字幕精品| 亚洲精品国精品久久99热| 欧美精品video| 欧美性20hd另类| 国产日本欧美一区| 久久久久北条麻妃免费看| 国产精品久久久999| 黑人狂躁日本妞一区二区三区| 国产精品白嫩初高中害羞小美女| 亚洲一二在线观看| 国产精品高潮呻吟久久av无限| 欧美精品videofree1080p| 久久久成人精品视频| 97av在线视频免费播放| 中文字幕亚洲色图| 亚洲欧洲第一视频| 日韩精品久久久久| 97免费视频在线播放| 精品国产999| 国产91ⅴ在线精品免费观看| 亚洲精品中文字幕av| 久久久久久久久久久91| 97婷婷大伊香蕉精品视频| 欧美一区二区三区免费视| 亚洲精品按摩视频| 亚洲第一页自拍| 国产欧美日韩免费看aⅴ视频| 久久av在线播放| 欧美巨乳在线观看| 尤物九九久久国产精品的特点| 成人在线免费观看视视频| 欧美激情日韩图片| 日韩中文在线视频| 欧美日韩免费区域视频在线观看| 尤物99国产成人精品视频| 国产精品自产拍高潮在线观看| 精品中文字幕在线2019| 久久久999精品| 亚洲欧美日韩天堂| 国产精品视频永久免费播放| 欧美激情视频一区| 亚洲一区二区三区sesese| 国产精品日韩在线播放| 亚洲人免费视频| 国产精品久久久久久久久男| 亚洲综合中文字幕在线观看| 国产成人高潮免费观看精品| 国产精品电影一区| 日韩国产欧美精品一区二区三区| 中文字幕亚洲欧美日韩在线不卡| 亚洲一级免费视频| 97视频人免费观看| 95av在线视频| 在线国产精品视频| 久久久久久久久中文字幕| 国产精品对白刺激| 国语自产在线不卡| 日韩av综合中文字幕| 亚洲色图国产精品| 国产成人av网| 日韩av影视在线| 成人夜晚看av| 亚洲欧美日韩另类| 国产精品老女人精品视频| 69久久夜色精品国产69乱青草| 日韩欧美在线视频观看| 一区二区三区日韩在线| 成人午夜两性视频| 国模精品视频一区二区三区| 欧美日韩福利视频| 久久亚洲国产成人| 日韩精品中文字幕有码专区| 国产精品视频一区二区高潮| 国产精品亚洲综合天堂夜夜| 国产精品久久一区主播| 日韩在线视频中文字幕| 日韩高清电影免费观看完整版| 久久久久女教师免费一区| 国产精品高潮呻吟久久av无限| 97在线视频免费| 国产精品盗摄久久久| 国产精品www色诱视频| 国产精品高清网站| 久久伊人精品天天| 色噜噜狠狠色综合网图区| 国产在线一区二区三区| 国产精品白丝jk喷水视频一区| 欧美在线视频播放| 亚洲v日韩v综合v精品v| 国产精品免费一区| 狠狠躁夜夜躁人人爽超碰91| y97精品国产97久久久久久| 中文在线不卡视频| 成人综合网网址| 中文字幕一区日韩电影| 亚洲色图欧美制服丝袜另类第一页| 欧美精品电影免费在线观看| 97视频在线观看免费高清完整版在线观看| 国产精品久久久亚洲| 精品视频久久久久久久| 狠狠躁夜夜躁人人爽天天天天97| 国产精品久久久久久久久粉嫩av| 夜夜嗨av一区二区三区四区| 国产在线视频一区| 九九热视频这里只有精品| 日韩经典中文字幕在线观看| 国产成人精品一区二区在线| 国产精品三级在线| 久99九色视频在线观看| 日本免费一区二区三区视频观看| 91精品国产精品| 亚洲欧美中文在线视频| 久久人91精品久久久久久不卡| 日韩av中文字幕在线免费观看| 久久精品中文字幕| 欧美精品日韩www.p站| 91免费的视频在线播放| 亚洲欧美国产视频| 亚洲最新中文字幕| 国产视频在线一区二区| 国产成人精品视频在线| 国产精品成人一区二区三区吃奶| 九九九热精品免费视频观看网站|