C#中this关键字的四种核心用法详解

Noah
Noah
发布时间:2026-10-14| 6人浏览过
原创

本文深入解析 C# 中 this 关键字的四种核心用法:利用它定义类的索引器以支持下标访问;在成员方法中将当前实例传递给其他方法;在构造函数重载中使用 this() 调用同类其他构造函数;以及在静态类中作为第一个参数实现针对特定类型的扩展方法。

准备条件:基础类结构定义

为了直观展示 this 的各种行为,我们首先构建两个基础的 C# 类:User(普通用户)和 VIP(会员,继承自 User)。这两个类包含属性、字典集合以及构造函数,为后续演示提供载体。

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>
    public User(int UserID, string UserName)
    {
      // 使用 this. 引用当前实例的属性,区分于同名参数
      this.UserName = UserName;
      this.ID = UserID;
    }

    /// <summary>
    /// 编号
    /// </summary>
    public int ID { get; set; }

    /// <summary>
    /// 用户名
    /// </summary>
    public string UserName { get; set; }

    public void Said()
    {
      new VIP().Say(this);
    }

  }

  /// <summary>
  /// 会员类 (继承自 User)
  /// </summary>
  public class VIP : User
  {
    /// <summary>
    /// 积分
    /// </summary>
    public int integral { get; set; }

    public VIP()
    {
      ID = 520;
      integral = 1000;
    }

    /// <summary>
    /// Say方法
    /// </summary>
    public void Say([LCQAttribute] 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
  {

  }
}

第1步:定义索引器 (Indexer)

目的:允许对象像数组一样使用下标 [] 进行访问和修改。

操作:在类内部定义一个名为 this 的类成员。需要指定索引器的参数类型和返回类型。

代码示例:

    /// <summary>
    /// this,第【1】种用法,索引器
    /// </summary>
    /// <param name="name"></param>
    /// <returns></returns>
    public object this[string name]
    {
      get { return dictInfo[name]; } 
      set { dictInfo[name] = value; } 
    }

完成状态:创建了一个接受 string 类型参数的索引器,内部基于 Dictionary 实现数据的存取。

第2步:将实例作为参数传递

目的:将当前对象的引用传递给其他类的方法。

操作:在方法体内直接使用 this 关键字作为实参。

代码示例:

    /// <summary>
    /// this第【2】种用法,当做参数传递
    /// </summary>
    public void Said()
    {
      // 将当前 User 实例传给 VIP 对象的 Say 方法
      new VIP().Say(this);
    }

第3步:构造函数间的调用 this()

目的:在构造函数中复用初始化逻辑,避免代码重复。

操作:在构造函数的参数列表后使用 : this(...) 语法。

代码示例:

    /// <summary>
    /// this第【3】种用法,通过this()调用无参构造函数
    /// </summary>
    /// <param name="UserName"></param>
    public VIP(string UserName)
      : this() 
    {
      this.UserName = UserName;
    }

重要参数:: this() 会先执行无参构造函数的内容,再执行当前构造函数的主体。

第4步:定义扩展方法 (Extension Methods)

目的:在不修改原始源代码的情况下,为现有类型添加新方法。

操作:在 static 类中定义 static 方法,并将该方法的第一个参数标记为 this,类型为要扩展的类型。

代码示例:

  /// <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));
    }
  }

执行测试与结果观察

为了验证以上用法,我们在控制台主程序中进行综合测试,依次调用各类特性。

static void Main(string[] args)
{
  // 声明实体
  User user = new User();
  user.ID = 1;
  user.UserName = "lichaoqiang";

  // 测试第一种用法: this用作索引器
  user["UserID"] = 1;
  Console.WriteLine("第【一】种用法:this用作索引器");

  // 测试第二种用法: this用作参数传递
  Console.WriteLine("第【二】种用法:this用作参数传递");
  user.Said();

  // 测试第三种用法: this()
  VIP vip = new VIP("yezi");
  vip.Said();
  Console.WriteLine("第【三】种用法:this()");

  // 测试第四种用法: this扩展VIP类(实际上是User的扩展)
  Console.WriteLine("第【四】种用法: this扩展VIP类");
  user.Sing();

  Console.Read();
}

运行上述代码,控制台将依次输出关于索引器调用、参数传递及扩展方法触发的信息,具体结果如下所示:

以上就是的详细内容,更多关于的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。