C#中this的用法集錦
this 關(guān)鍵字引用類的當(dāng)前實例,還可用作擴展方法的第一個參數(shù)的修飾符。下面就針對this的四種用法,做簡單的總結(jié)。
首先,我們分別創(chuàng)建User和VIP兩個C#類
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace AppConsole { /// <summary> /// 普通用戶 /// </summary> public class User { /// <summary> /// 全局變量 /// </summary> Dictionary<string, object> dictInfo = null; /// <summary> /// 構(gòu)造器 /// </summary> public User() { dictInfo = new Dictionary<string, object>(); } /// <summary> /// 構(gòu)造函數(shù)重載 /// </summary> /// <param name="UserID"></param> /// <param name="UserName"></param> public User(int UserID, string UserName) { this.UserName = UserName; this.ID = UserID; } /// <summary> /// this,第【1】種用法,索引器 /// </summary> /// <param name="name"></param> /// <returns></returns> public object this[string name] { get { return dictInfo[name]; } set { dictInfo[name] = value; } } /// <summary> /// 編號 /// </summary> public int ID { get; set; } /// <summary> /// 用戶名 /// </summary> public string UserName { get; set; } /// <summary> /// this第【2】種用法,當(dāng)做參數(shù)傳遞 /// </summary> public void Said() { new VIP().Say(this); } } /// <summary> /// 會員 /// </summary> public class VIP : User { /// <summary> /// 積分 /// </summary> public int integral { get; set; } /// <summary> /// 構(gòu)造函數(shù) /// </summary> public VIP() { ID = 520; integral = 1000; } /// <summary> /// this第【3】種用法,通過this()調(diào)用無參構(gòu)造函數(shù) /// </summary> /// <param name="UserName"></param> public VIP(string UserName) : this() { this.UserName = UserName; } /// <summary> /// 構(gòu)造函數(shù)重載 /// </summary> /// <param name="UserID"></param> /// <param name="UserName"></param> public VIP(int UserID, string UserName) : base(UserID, UserName) { } /// <summary> ///Say方法 /// </summary> /// <param name="user"></param> public void Say([LCQAttribute] User user) { Console.WriteLine(string.Format("嗨,大家好!我的編號是{0},大家可以叫我{1}!", user.ID, user.UserName)); } } /// <summary> /// 靜態(tài)類,來擴展User類 /// </summary> public static class Helper { /// <summary> /// 第【4】種用法: this擴展User類 /// </summary> /// <param name="user"></param> public static void Sing(this User user) { Console.WriteLine(string.Format("嗨,大家好!我的編號是{0},大家可以叫我{1}!", user.ID, user.UserName)); } } /// <summary> /// 特性類:指定特性僅適用于方法和方法的參數(shù) /// </summary> [System.AttributeUsage(AttributeTargets.Method | AttributeTargets.Parameter)] public class LCQAttribute : System.Attribute { } }
this第【1】種用法,索引器
/// <summary> /// 全局變量 /// </summary> Dictionary<string, object> dictInfo = null; /// <summary> /// this,第【1】種用法,索引器 /// </summary> /// <param name="name"></param> /// <returns></returns> public object this[string name] { get { return dictInfo[name]; } set { dictInfo[name] = value; } }
this第【2】種用法,當(dāng)做參數(shù)傳遞
/// <summary> /// this第【2】種用法,當(dāng)做參數(shù)傳遞 /// </summary> public void Said() { new VIP().Say(this); }
this第【3】種用法,通過this()調(diào)用無參構(gòu)造函數(shù)
/// <summary> /// this第【3】種用法,通過this()調(diào)用無參構(gòu)造函數(shù) /// </summary> /// <param name="UserName"></param> public VIP(string UserName) : this() { this.UserName = UserName; }
this第【4】種用法:擴展User類
/// <summary> /// 靜態(tài)類,來擴展User類 /// </summary> public static class Helper { /// <summary> /// 第【4】種用法: this擴展User類 /// </summary> /// <param name="user"></param> public static void Sing(this User user) { Console.WriteLine(string.Format("嗨,大家好!我的編號是{0},大家可以叫我{1}!", user.ID, user.UserName)); } }
最后,控制臺測試
/// <summary> /// 主程序入口 /// </summary> /// <param name="args"></param> static void Main(string[] args) { //0>聲明實體 User user = new User(); user.ID = 1; user.UserName = "lichaoqiang"; //第【一】種用法:this用作索引器 public object this[string name]{……} user["UserID"] = 1; Console.WriteLine("第【一】種用法:this用作索引器"); //第【二】種用法:this用作參數(shù)傳遞 user.Say(this); Console.WriteLine("第【二】種用法:this用作參數(shù)傳遞"); user.Said(); //第【三】種用法:this() public VIP:this(){ } VIP vip = new VIP("yezi"); vip.Said(); Console.WriteLine("第【三】種用法:this()"); //第【四】種用法: this擴展VIP類 public static Sing(this User user){……} Console.WriteLine("第【四】種用法: this擴展VIP類"); user.Sing(); Console.Read(); }
最終結(jié)果示意圖
以上所述上就是本文的全部內(nèi)容了,希望大家能夠喜歡。
相關(guān)文章
C#中String StringBuilder StringBuffer類的用法
這篇文章給大家簡單介紹下C#中String StringBuilder StringBuffer三個類的用法,需要的的朋友參考下吧2017-05-05C#的靜態(tài)工廠方法與構(gòu)造函數(shù)相比有哪些優(yōu)缺點
這篇文章主要介紹了C#的靜態(tài)工廠方法與構(gòu)造函數(shù)對比的優(yōu)缺點,文中示例代碼非常詳細,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07