国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

.Net方法概述和分類

開發 后端
“方法”是包含一系列語句的代碼塊。在 C# 中,每個執行指令都是在方法的上下文中完成的。方法在類或結構中聲明,聲明時,聲明時需要指定訪問級別、返回值、方法名稱以及任何方法參數。

.Net方法概述

  • 方法

     “方法”是包含一系列語句的代碼塊。在 C# 中,每個執行指令都是在方法的上下文中完成的。方法在類或結構中聲明,聲明時,聲明時需要指定訪問級別、返回值、方法名稱以及任何方法參數。方法參數放在括號中,并用逗號隔開??绽ㄌ柋硎痉椒ú恍枰獏?。方法可以有或沒有參數,也可以有或沒有返回值。

  • Main方法

     Main 方法是控制臺應用程序或窗口應用程序的入口點。Main 方法是 .exe 程序的入口點,程序控制流在該處開始和結束。Main 在類或結構內聲明,Main 必須是靜態的,且不應該是公用的,但不要求封閉類或結構是靜態的。Main 的返回類型有兩種:void 或 int。所聲明的 Main 方法可以具有包含命令行實參的 string[] 形參,也可以不具有這樣的形參。使用 Visual Studio 創建 Windows 窗體應用程序時,可以手動添加形參,也可以使用 Environment 類獲取命令行實參。 形參讀取為從零開始編制索引的命令行實參。與 C 和 C++ 不同,在 C# 中不將程序名稱視為第一個命令行實參。

  • 重載

     定義一組名字相同的成員,但他們的參數數量或類型不同。

  • 參數

     對于被調用的方法,傳入的變量稱為“參數”。方法所接收的參數也是在一組括號中提供的,但必須指定每個參數的類型和名稱。該名稱不必與參數相同。

  • 參數修飾符
    • 無:值傳遞,原始數據的一份副本
    • out:引用傳遞,方法未給該參數賦值會出現編譯錯誤
    • ref:引用傳遞,方法未給該參數賦值也不會出現編譯錯誤
    • params:允許將一組可變數量的參數作為單獨的邏輯參數進行傳遞,方法中只能有一個params,必須是方法中的最后一個參數
  • 參數傳遞
    • 值傳遞(默認)
      • 值類型:傳遞的是數據值的副本
    • 引用傳遞
      • out
      • ref
  • 可選參數

     指定參數的默認值,默認值必須在編譯時確定而不能在運行時確定,只能放在方法參數的最后。

  • 命名參數調用方法

     使用命名參數可以在方法調用時更換參數的順序。

  • 返回值

方法可以向調用方返回值。如果返回類型(方法名稱前列出的類型)不是 void,則方法可以使用 return 關鍵字來返回值。

  • 返回值修飾符
    • 無返回值:void
    • 有返回值:返回值的類型名
  • 方法簽名
    • 訪問修飾符
      • private:私有的,類本身才能訪問
      • protected:受保護的,類本身及派生類可訪問
      • internal:內部的,同一程序集內部類型才能訪問
      • public:公共的,內部與外部都可以訪問
    • 可選修飾符
      • irtual:虛擬的
      • static:靜態的
      • abstract:抽象的
      • sealed:封閉的
      • override:繼承的

#p#

 .NET 泛型方法

  • 泛型方法

 泛型方法是使用類型參數聲明的方法。

  1. static void Swap<T>(ref T lhs, ref T rhs) 
  2.     T temp; 
  3.     temp = lhs
  4.     lhs = rhs
  5.     rhs = temp
  • 類型推斷

相同的類型推斷規則也適用于靜態方法以及實例方法。編譯器能夠根據傳入的方法參數推斷類型參數;它無法僅從約束或返回值推斷類型參數。因此,類型推斷不適用于沒有參數的方法。類型推斷在編譯時、編譯器嘗試解析任何重載方法簽名之前進行。編譯器向共享相同名稱的所有泛型方法應用類型推斷邏輯。在重載解析步驟中,編譯器僅包括類型推斷取得成功的那些泛型方法。

  1. Swap(ref a, ref b); 
  • 非泛型方法使用泛型參數

在泛型類中,非泛型方法可以訪問類級別類型參數。

  1. class SampleClass<T> 
  2.     void Swap(ref T lhs, ref T rhs) { } 

 

  • 泛型類與泛型方法使用相同的泛型參數

 如果定義的泛型方法接受與包含類相同的類型參數,編譯器將生成警告 CS0693,因為在方法范圍內,為內部 T 提供的參數將隱藏為外部 T 提供的參數。除了類初始化時提供的類型參數之外,如果需要靈活調用具有類型參數的泛型類方法,請考慮為方法的類型參數提供其他標識符,如下面示例中的 GenericList2<T> 所示。

  1. class GenericList<T> 
  2.     // CS0693 
  3.     void SampleMethod<T>() { } 
  4. class GenericList2<T> 
  5.     //No warning 
  6.     void SampleMethod<U>() { } 
  • 泛型約束

     使用約束對方法中的類型參數啟用更專門的操作。此版本的 Swap<T> 現在稱為 SwapIfGreater<T>,它只能與實現 IComparable<T> 的類型參數一起使用。

  1. void SwapIfGreater<T>(ref T lhs, ref T rhs) where T : System.IComparable<T> 
  2.     T temp; 
  3.     if (lhs.CompareTo(rhs) > 0) 
  4.     { 
  5.         temp = lhs
  6.         lhs = rhs
  7.         rhs = temp
  8.     } 
  • 方法重載

     泛型方法可以使用許多類型參數進行重載。

  1. void DoWork() { } 
  2. void DoWork<T>() { } 
  3. void DoWork<T, U>() { }

#p#

.Net擴展方法

  • 擴展方法

擴展方法使您能夠向現有類型“添加”方法,而無需創建新的派生類型、重新編譯或以其他方式修改原始類型。 擴展方法是一種特殊的靜態方法,但可以像擴展類型上的實例方法一樣進行調用。 對于用 C# 和 Visual Basic 編寫的客戶端代碼,調用擴展方法與調用在類型中實際定義的方法之間沒有明顯的差異。

通常,建議您只在不得已的情況下才實現擴展方法,并謹慎地實現。 只要有可能,必須擴展現有類型的客戶端代碼都應該通過創建從現有類型派生的新類型來達到這一目的。

  • 限制條件
    • 必須定義在靜態類中
    • 必須使用this關鍵字對第一個參數進行修飾
    • 每個擴展方法只能被內存中正確的實例和其所在的靜態類調用
  • 代碼示例
  1. namespace DefineIMyInterface 
  2.     using System; 
  3.     public interface IMyInterface 
  4.     { 
  5.         void MethodB(); 
  6.     } 
  7. namespace Extensions 
  8.     using System; 
  9.     using DefineIMyInterface; 
  10.     public static class Extension 
  11.     { 
  12.         public static void MethodA(this IMyInterface myInterface, int i) 
  13.         { 
  14.             Console.WriteLine 
  15.                 ("Extension.MethodA(this IMyInterface myInterface, int i)"); 
  16.         } 
  17.         public static void MethodA(this IMyInterface myInterface, string s) 
  18.         { 
  19.             Console.WriteLine 
  20.                 ("Extension.MethodA(this IMyInterface myInterface, string s)"); 
  21.         } 
  22.         public static void MethodB(this IMyInterface myInterface) 
  23.         { 
  24.             Console.WriteLine 
  25.                 ("Extension.MethodB(this IMyInterface myInterface)"); 
  26.         } 
  27.     } 
  28. namespace ExtensionMethodsDemo1 
  29.     using System; 
  30.     using Extensions; 
  31.     using DefineIMyInterface; 
  32.     class A : IMyInterface 
  33.     { 
  34.         public void MethodB() { Console.WriteLine("A.MethodB()"); } 
  35.     } 
  36.     class B : IMyInterface 
  37.     { 
  38.         public void MethodB() { Console.WriteLine("B.MethodB()"); } 
  39.         public void MethodA(int i) { Console.WriteLine("B.MethodA(int i)"); } 
  40.     } 
  41.     class C : IMyInterface 
  42.     { 
  43.         public void MethodB() { Console.WriteLine("C.MethodB()"); } 
  44.         public void MethodA(object obj) 
  45.         { 
  46.             Console.WriteLine("C.MethodA(object obj)"); 
  47.         } 
  48.     } 
  49.     class ExtMethodDemo 
  50.     { 
  51.         static void Main(string[] args) 
  52.         { 
  53.             A a = new A(); 
  54.             B b = new B(); 
  55.             C c = new C(); 
  56.             a.MethodA(1);           // Extension.MethodA(object, int) 
  57.             a.MethodA("hello");     // Extension.MethodA(object, string) 
  58.             a.MethodB();            // A.MethodB() 
  59.             b.MethodA(1);           // B.MethodA(int) 
  60.             b.MethodB();            // B.MethodB() 
  61.             b.MethodA("hello");     // Extension.MethodA(object, string) 
  62.             c.MethodA(1);           // C.MethodA(object) 
  63.             c.MethodA("hello");     // C.MethodA(object) 
  64.             c.MethodB();            // C.MethodB() 
  65.         } 
  66.     } 

#p#

.NET 分部方法

  • 分部方法

分部類或結構可以包含分部方法。 類的一個部分包含方法的簽名。 可以在同一部分或另一個部分中定義可選實現。 如果未提供該實現,則會在編譯時移除方法以及對方法的所有調用。

分部方法使類的某個部分的實施者能夠定義方法(類似于事件)。 類的另一部分的實施者可以決定是否實現該方法。 如果未實現該方法,編譯器將移除方法簽名以及對該方法的所有調用。 調用該方法,包括調用中的任何計算結果,在運行時沒有任何影響。 因此,分部類中的任何代碼都可以隨意地使用分部方法,即使未提供實現也是如此。 如果調用了未實現的方法,將不會導致編譯時錯誤或運行時錯誤。

在自定義生成的代碼時,分部方法特別有用。 這些方法允許保留方法名稱和簽名,因此生成的代碼可以調用方法,而開發人員可以決定是否實現方法。 與分部類非常類似,分部方法使代碼生成器創建的代碼和開發人員創建的代碼能夠協同工作,而不會產生運行時開銷。

分部方法聲明由兩個部分組成:定義和實現。 它們可以位于分部類的不同部分中,也可以位于同一部分中。 如果不存在實現聲明,則編譯器將優化定義聲明和對方法的所有調用。

  • 限制條件
    • 分部方法聲明必須以上下文關鍵字 partial 開頭,并且方法必須返回 void。
    • 分部方法可以有 ref 參數,但不能有 out 參數。
    • 分部方法為隱式 private 方法,因此不能為 virtual 方法。
    • 分部方法不能為 extern 方法,因為主體的存在確定了方法是在定義還是在實現。
    • 分部方法可以有 static 和 unsafe 修飾符。
    • 分部方法可以為泛型的。約束將放在定義分部方法聲明上,但也可以選擇重復放在實現聲明上。參數和類型參數名稱在實現聲明和定義聲明中不必相同。
    • 您可以為已定義并實現的分部方法生成委托,但不能為已經定義但未實現的分部方法生成委托。
  • 代碼示例
  1. partial void onNameChanged(); 
  2. partial void onNameChanged(){}

 

責任編輯:陳四芳 來源: M守護神
相關推薦

2011-09-16 14:55:07

WLAN干擾無線干擾WLAN

2010-01-13 11:11:42

VB.NET Date

2009-08-13 11:22:59

LINQ和ADO.NE

2013-08-21 16:57:48

.NET反射

2009-11-10 11:04:09

VB.NET數據類型

2010-01-18 13:46:32

VB.NET條件分支語

2024-11-04 06:10:00

.NETThreadPool線程池

2009-11-02 14:27:42

Visual Stud

2009-03-11 10:44:49

.netvb.netArray

2009-07-29 13:04:59

2009-07-27 15:52:21

ASP.NET特點ASP.NET概述

2009-07-23 16:55:55

ASP.NET特點

2009-08-05 13:58:26

ASP.NET Mem

2009-07-22 16:17:39

ASP.NET AJA

2013-07-30 14:00:46

.NET數據類型

2010-01-07 15:42:57

VB.NET WhilEnd While循環

2022-09-29 23:53:06

機器學習遷移學習神經網絡

2009-07-28 17:17:19

ASP.NET概述

2009-07-22 17:45:35

ASP.NET教程

2009-08-05 17:54:04

ASP.NET運行模式
點贊
收藏

51CTO技術棧公眾號

中文字幕亚洲欧美一区二区三区| 色综合久久中文综合久久牛| 欧洲美女免费图片一区| 日韩午夜影院| 成人激情av网| 欧美亚洲激情在线| 国产精选在线| 欧美性猛交99久久久久99按摩| 女人另类性混交zo| 波多野洁衣一区| dy888午夜| 国产一区二区你懂的| 91在线网站视频| 欧洲精品视频在线| 91精品国产乱码久久久久久| 亚洲免费在线播放| 亚洲精品视频免费在线观看| 一二三四视频社区在线| 午夜欧美激情| 不卡的av电影| 日韩精品在线影院| 一区二区三区av| 成人三级av在线| 国产午夜亚洲精品午夜鲁丝片| 欧美成人免费全部| 日韩一区二区三区精品| 欧美高清激情视频| av毛片精品| 成人高h视频在线| 综合久久2023| 久久精品在线视频| 国产69精品久久久久孕妇| 久久伊人亚洲| 91成人在线观看国产| 欧美私人情侣网站| 欧美第一在线视频| 成人免费视频一区| 97超碰在线视| 久久综合亚州| 区一区二视频| 97久久精品人人做人人爽50路 | 日本免费一区二区三区视频| 激情av综合网| 欧美一级欧美三级在线观看| 国产成一区二区| 一二三四在线视频观看社区| 小小影院久久| 影院欧美亚洲| 91麻豆桃色免费看| 亚洲久久一区| 欧美老女人在线视频| 欧美24videosex性欧美| 欧美日韩国产精品一区二区不卡中文| 成人xxx免费视频播放| 中文字幕午夜精品一区二区三区 | 成人毛片av在线| 国产三级精品三级在线专区| aa视频在线播放| 日韩影片在线观看| 久久色免费在线视频| 麻豆国产精品va在线观看不卡| 二区三区不卡| 欧美高清不卡在线| 中文字幕av一区二区三区免费看| 爆操妹子视频在线观看| 国产精品久久福利| 日韩无一区二区| 国产精品久久久久久久浪潮网站| 青青草影院在线观看| 欧美丰满少妇xxxxx高潮对白| 97人人香蕉| 美女91精品| 两个人hd高清在线观看| 亚洲视频专区在线| 中文字幕免费一区二区| 精品剧情v国产在线观看| 亚洲免费高清视频| 日本大胆欧美人术艺术动态 | 亚洲大胆精品| 国产精品99久久99久久久二8| 久久久噜噜噜久久中文字幕色伊伊| 色88888久久久久久影院| 麻豆国产精品777777在线| 国产一区二区丝袜高跟鞋图片| 伊人亚洲精品| 91国产在线播放| 精品国产乱码久久久久久果冻传媒| 欧美精品免费在线观看| japanese国产精品| 日韩日韩日韩日韩日韩| 在线亚洲高清视频| 男女羞羞在线观看| 啊v视频在线一区二区三区 | 精品久久久久99| 666av成人影院在线观看| 91久久久久久久久久久久久| 欧美日韩国产精品专区| 国产特级嫩嫩嫩bbb| 精品久久久久久久久久久久久久 | 亚洲va电影大全| 丝袜美腿高跟呻吟高潮一区| 免费观看美女裸体网站| 欧美不卡在线视频| 精品国产aⅴ| 亚洲欧美国产日韩综合| 性色av一区二区三区| 老妇喷水一区二区三区| 美女精品国产| 亚洲精品国产欧美| 99综合电影在线视频| 久久国产精品免费观看| 亚洲国产另类精品专区| 99久久99九九99九九九| 一区二区不卡在线观看| 日韩精品免费视频一区二区三区 | 成人免费无遮挡| 国产一区二区三区免费不卡| 亚洲精品视频一区二区| 9l亚洲国产成人精品一区二三| 国产精品69久久久| 亚洲人成毛片在线播放| 成年人免费在线播放| 91蝌蚪国产九色| 神马久久午夜| 色综合久久88色综合天天看泰| 亚洲综合精品久久| 国产调教视频一区| 中文字幕一区二区三区在线不卡| 国产精品啊v在线| 在线精品自拍| 99精品在免费线中文字幕网站一区| 国产乱码在线| 台湾佬中文娱乐网欧美电影| 国产视频青青| 97caopor国产在线视频| a级片国产精品自在拍在线播放| 一二三四区在线观看| 可以直接在线观看的av| 国产精品186在线观看在线播放| 最新国产露脸在线观看| 国产综合av| 亚洲国产一区二区三区在线播| 国产精品海角社区在线观看| 亚洲人成在线观看| 91po在线观看91精品国产性色| 91精品视频在线播放| 精品国产一区二区三区在线| 日本女优爱爱视频| 中文字幕日韩精品无码内射| 国产视频97| 9lporm自拍视频区在线| 91桃色在线观看| 久久精品不卡| 国产电影精品久久禁18| 亚洲综合免费观看高清完整版在线 | 99re成人精品视频| 欧美午夜女人视频在线| 亚洲男人天堂手机在线| caoporn国产精品免费公开| 国产一区二区在线观看免费播放| 国产自产在线视频| 亚洲精品一线| 99视频精品视频高清免费| 国产欧美一区二区三区网站| 亚洲护士老师的毛茸茸最新章节| 国产精品免费一区| 成人午夜视频免费在线观看| 黄色aa久久| 日韩国产成人精品| 日本韩国一区二区| 韩国日本不卡在线| 国产一区二区三区在线免费| 国模雨婷捆绑高清在线| 欧美挤奶吃奶水xxxxx| 久久中文娱乐网| 日韩在线视频免费观看| 日本一区免费观看| 91污色多多| 性欧美videos高清hd4k| 日韩电影免费在线看| 国产精品久久久久久久久免费樱桃| 国产精品亚洲综合久久| 日本一区二区三区视频视频| 欧美变态口味重另类| 国产一级特黄a大片99| 你懂的在线观看视频网站| 中文在线免费一区三区| 毛片免费在线观看| 亚洲成人毛片| 久久久青草青青国产亚洲免观| 久久精品久久久久电影| 日韩欧美亚洲日产国| 深夜成人影院| 欧美激情一区二区三区不卡| 色综合视频网站| 国产69精品久久久久孕妇| 欧美三级美国一级| 色综合一个色综合亚洲| 国产中文字幕日韩| 国产激情小视频在线|