当前位置: 首页 > 编程笔记 >

C#中this的用法集锦

宋俊民
2023-03-14
本文向大家介绍C#中this的用法集锦,包括了C#中this的用法集锦的使用技巧和注意事项,需要的朋友参考一下

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.构造函数 这是我比