概述
? ??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