概述
this在C#中有多種用法,也比較常見,這節主要針對它常用的四種用法展開講解.
用法1:構造函數串聯執行;
用法2:通過this區分傳參和類中全局的定義;
用法3:方法擴充類;
用法4:将對象作為參數傳遞;
代碼執行個體
using System.Text; namespace Caliburn.Micro.Hello.ViewModels { public class ThisUsageViewModel : Screen, IViewModel { private StringBuilder stringBuilder = new StringBuilder(); public string DisplayInfo { get; set; } public ThisUsageViewModel() { DisplayName = "ThisUsageViewModel"; DisplayInfo = "【1】this is ctor one"; stringBuilder.AppendLine(DisplayInfo); DisplayInfo = "【2】this is ctor two"; stringBuilder.AppendLine(DisplayInfo); DisplayInfo = "【3】this is CallMember"; CallMember(DisplayInfo); stringBuilder.AppendLine(TestHelper.ObjectTransfer(this));//用法4:将對象作為參數傳遞 DisplayInfo = stringBuilder.ToString(); } /// <summary> /// 用法1:構造函數串聯執行 /// </summary> /// <param name="flag"></param> public ThisUsageViewModel(bool flag) : this() { } public void CallMember(string DisplayInfo) { this.DisplayInfo = DisplayInfo;//用法2:通過this區分傳參和類中全局的定義 stringBuilder.AppendLine(this.DisplayInfo); this.ExtensionMethod(); } public void ExtensionMethod() { double aHeight = 175; double bHeight = 1.82; stringBuilder.AppendLine($"【4】{aHeight.CMToM()}"); stringBuilder.AppendLine($"【5】{bHeight.MToCM()}"); } } /// <summary> /// 用法3:方法擴充類 /// </summary> public static class DoubleExtension { public static double MToCM(this double value) { return value * 100; } public static double CMToM(this double value) { return value / 100; } } public class TestHelper { public static string ObjectTransfer(ThisUsageViewModel thisUsageView) { thisUsageView.DisplayInfo = "【6】this is Object Transfer"; return thisUsageView.DisplayInfo; } } }
運作結果:
用法講解:1. 串聯構造函數
構造函數通過繼承this(),新的構造函數執行時候會先執行類中預設的無參構造函數然後再執行新的構造函數;比如本執行個體中,如果執行個體化了一個類:
var thisUsageViewModel = new ThisUsageViewModel(true);
這個類會先執行ThisUsageViewModel()中的代碼,再執行ThisUsageViewModel(bool flag) : this()裡的代碼;
用法講解:2. 通過this區分傳參和類中全局的定義
通過加字首this代表調用的是類中的全局變量、屬性或者方法,尤其是方法的傳參和類中的變量名一緻時,需要通過this區分;
用法講解:3. 方法擴充類
如本執行個體的類DoubleExtension,中的MToCM和CMToM,第一個參數用this标注代表是要擴充的類型,然後類和方法都需要是公共的靜态類型,這種我們就可以通過double.MToCM()或double.CMToM去調用擴充方法;
用法講解:4. 将對象作為參數傳遞
如本執行個體的
stringBuilder.AppendLine(TestHelper.ObjectTransfer(this));//用法4:将對象作為參數傳遞
this實際上就是執行個體化了一個對象作為參數進行傳遞.
源碼下載下傳
連結:https://pan.baidu.com/s/1RAMFfy-Kjb01f7PUevP_7w
提取碼:6666