this 关键字引用类的当前实例,还可用作扩展方法的第一个参数的修饰符。下面就针对this的四种用法,做简单的总结。
首先,我们分别创建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> /// 构造器 /// </summary> public User() { dictInfo = new Dictionary<string, object>(); } /// <summary> /// 构造函数重载 /// </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】种用法,当做参数传递 /// </summary> public void Said() { new VIP().Say(this); } } /// <summary> /// 会员 /// </summary> public class VIP : User { /// <summary> /// 积分 /// </summary> public int integral { get; set; } /// <summary> /// 构造函数 /// </summary> public VIP() { ID = 520; integral = 1000; } /// <summary> /// this第【3】种用法,通过this()调用无参构造函数 /// </summary> /// <param name="UserName"></param> public VIP(string UserName) : this() { this.UserName = UserName; } /// <summary> /// 构造函数重载 /// </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> /// 静态类,来扩展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> [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】种用法,当做参数传递
/// <summary> /// this第【2】种用法,当做参数传递 /// </summary> public void Said() { new VIP().Say(this); }
this第【3】种用法,通过this()调用无参构造函数
/// <summary> /// this第【3】种用法,通过this()调用无参构造函数 /// </summary> /// <param name="UserName"></param> public VIP(string UserName) : this() { this.UserName = UserName; }
this第【4】种用法:扩展User类
/// <summary> /// 静态类,来扩展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用作参数传递 user.Say(this); Console.WriteLine("第【二】种用法:this用作参数传递"); 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(); }
最终结果示意图
以上所述上就是本文的全部内容了,希望大家能够喜欢。
C++ 类 & 对象 在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址。this 指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象。 友元函数没有 this 指针,因为友元不是类的成员。只有成员函数才有 this 指针。 下面的实例有助于更好地理解 this 指针的概念:#include <iostream> using namespace std; c
本文向大家介绍C# this关键字的四种用法,包括了C# this关键字的四种用法的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C# this关键字的四种用法,供大家参考,具体内容如下 用法一 this代表当前实例,用this.显式调用一个类的方法和成员 用法二 通过this实现原始类型的扩展(下一篇详解) 用法三 通过this实现索引器,可用于优化程序性能(下一篇详解) 用
本文向大家介绍C#中的集合用法分析,包括了C#中的集合用法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#中的集合用法,分享给大家供大家参考。具体分析如下: 【集合不同于数组,是一组可变类型的、可变数量的元素的组合,这些元素可能共享某些特征,需要以某种操作方式一起进行操作。一般来讲,为了便于操作这些元素的类型是相同的】 【集合与数组的区别:数组是连续的、同一类型数据的一块区域,而集
本文向大家介绍C++中this指针用法详解及实例,包括了C++中this指针用法详解及实例的使用技巧和注意事项,需要的朋友参考一下 C++中this指针用法详解及实例 概要: 本文简单介绍this指针的基本概念,并通过一个实际例子介绍this指针用于防止变量命名冲突和用于类中层叠式调用的两个用法。 this指针概览 C++中,每个类 对应了一个对象,每个对象指向自己所在内存地址的方式即为使用thi
本文向大家介绍C#中this的使用实例分析,包括了C#中this的使用实例分析的使用技巧和注意事项,需要的朋友参考一下 this关键字在C#程序设计中的应用非常频繁,今天本文就this关键字的用法做一番分析,希望能提对大家的C#程序设计有一定的帮助作用。具体分析如下: 1.代表当前类,在当前类中可使用this访问当前类成员变量和方法(需要注意的是 静态方法中不能使用this),也可用于参数传递,传
本文向大家介绍Javascript的this用法,包括了Javascript的this用法的使用技巧和注意事项,需要的朋友参考一下 this是Javascript语言的一个关键字。 它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。比如, 随着函数使用场合的不同,this的值会发生变化。但是有一个总的原则,那就是this指的是,调用函数的那个对象。 下面分四种情况,详细讨论this的用
本文向大家介绍javascript中this的四种用法,包括了javascript中this的四种用法的使用技巧和注意事项,需要的朋友参考一下 this 在函数执行时,this 总是指向调用该函数的对象。要判断 this 的指向,其实就是判断 this 所在的函数属于谁。 在《javaScript语言精粹》这本书中,把 this 出现的场景分为四类,简单的说就是: 有对象就指向调用对象 没调用对象
本文向大家介绍Javascript中this的用法详解,包括了Javascript中this的用法详解的使用技巧和注意事项,需要的朋友参考一下 前些日子面试的时候用到了this,面试官说我的理解有点偏差,回来看了下书和一些博客,做了点测试,发现自己的理解的确有误 1.全局变量 应该是最常用的吧,函数中调用一个this,这里其实就是全局变量 输出0就是因为this指向的是全局 2.构造函数 这是我比