C#中this关键字的用法详解:访问成员与声明索引器

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

在C#程序设计语言中,this 关键字是区分实例成员与局部变量、构建复杂数据接口的重要工具。本文将结合代码示例,详细拆解 this 在引用当前对象成员以及定义重载索引器两大场景下的应用规范与实操细节。

一、引用当前类的成员

当一个方法或属性内部存在与类成员同名的局部变量或参数时,this 关键字用于明确指向当前实例的属性,避免命名遮蔽。此外,它还能将当前对象的引用传递给其他函数。需要特别注意的是,由于 this 代表具体的实例,因此严禁在 static(静态)方法中使用。

第1步:实例化对象并初始化成员

在一个独立的类结构中创建实例,并通过构造函数使用 this 为私有属性赋值,同时调用实例方法输出结果。以下代码演示了基本的成员访问逻辑:

class Program
{
    static void Main(string[] args)
    {
        thisClass testObj = new thisClass();
        Console.ReadLine();
    }
}

class thisClass
{
    private string A { get; set; }

    public thisClass()
    {
        /*利用this关键字对当前类实例的属性A进行赋值*/
        this.A = "Test String";
        
        /*通过this调用当前实例的方法*/
        Console.WriteLine(this.TestFun("TestFun :"));
    }

    private string TestFun(string args)
    {
        return args + this.A;
    }
}

执行上述代码后,控制台将打印出拼接后的字符串信息。运行结果见下图所示:

二、声明索引器 (Indexers)

索引器允许类的实例像数组一样被索引访问。与普通属性不同,索引器的访问器包含参数。在C#中,索引器必须定义为实例成员,不能标记为 static,且支持重载,即可以在同一个类中定义多个具有不同参数类型的索引器。

第2步:实现基于整数索引的访问

首先创建一个用于管理对象的容器类,定义一个整型索引器。该索引器内部维护一个对象数组,当读取时返回指定下标的元素,写入时替换对应位置的元素。

第3步:重载以支持自定义类型索引

为了满足更灵活的查找需求,可以重载索引器,引入字符串作为索引键。此处利用 Hashtable 存储键值对映射关系。通过在同一个类中定义两个签名不同的 this[...]` 访问器,实现了多种访问方式的共存。

完整的索引器实现代码如下:

class Program
{
    static void Main(string[] args)
    {
        indexClass intIndexClass = new indexClass();
        // 使用整数索引赋值
        intIndexClass[0] = new thisClass("intIndexClass 111");
        intIndexClass[1] = new thisClass("intIndexClass 222");

        indexClass stringIndexClass = new indexClass();
        // 使用字符串索引赋值
        stringIndexClass["string1"] = new thisClass("stringIndexClass string1");
        stringIndexClass["string2"] = new thisClass("stringIndexClass string2");

        Console.ReadLine();
    }
}

class indexClass
{
    /*底层数据存储容器*/
    private thisClass[] thisClassArr = new thisClass[10];
    private Hashtable thisClassStrArr = new Hashtable();

    /*创建索引器1:支持整数索引访问*/
    public thisClass this[int index]
    {
        get { return thisClassArr[index]; }
        set { this.thisClassArr[index] = value; }
    }

    /*创建索引器2:支持字符串键值访问,实现索引器重载*/
    public thisClass this[string index]
    {
        get
        {
            return thisClassStrArr[index] as thisClass;
        }
        set { this.thisClassStrArr[index] = value; }
    }
}

class thisClass
{
    private string A { get; set; }
    public thisClass(string str)
    {
        this.A = str;
        Console.WriteLine(this.TestFun("TestFun :"));
    }
    private string TestFun(string args)
    {
        return args + this.A;
    }
}

程序运行过程中,会针对每一次赋值操作触发对应的构造逻辑并打印输出,具体结果展示如下:

三、总结

this 关键字在C#中具有明确的边界:它是实例的专属标识。无论是为了在冲突环境下精确获取当前成员的值,还是为了实现类似数组般的便捷数据结构(索引器),合理使用 this 都能显著提升代码的可读性与复用性。开发者在处理类内逻辑时,应时刻注意静态上下文中不可使用 this 这一核心约束。

以上就是C#中this关键字用法的详细内容,更多关于C#程序设计资料请关注本站其它相关文章!

相关标签:

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

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 算法库。