面相对象

this关键字

预计阅读时间1 分 7 views

前言

在C#中,this 关键字用于引用当前实例的对象。它帮助我们在类的内部访问当前对象的成员,例如字段、属性和方法。

作用

this 关键字主要用于以下几个方面:

  • 访问当前对象的字段和方法。
  • 区分实例变量和方法参数或局部变量。
  • 从一个构造函数调用另一个构造函数(构造函数链)。
  • 将当前对象作为参数传递给方法。
  • 声明索引器,使对象可以像数组一样被索引。

使用场景

  1. 处理同名变量:当实例变量和方法参数有相同的名称时,可以使用 this 关键字来区分它们。
  2. 构造函数链:在构造函数中调用另一个构造函数。
  3. 作为参数传递:将当前对象传递给类中的其他方法。
  4. 索引器:通过索引器使对象可以像数组一样被访问。

示例

处理同名变量

在构造函数中,实例变量和方法参数可能会有相同的名称。示例如下:

using System;

namespace ThisKeywordExample {
    class Test {
        int num;

        // 构造函数
        public Test(int num) {
            // 使用 this 关键字区分实例变量和参数
            this.num = num;
        }

        static void Main(string[] args) {
            Test t1 = new Test(4);
            Console.WriteLine("num 的值: " + t1.num);
            Console.ReadLine();
        }
    }
}

输出

num 的值: 4

在这个示例中,通过使用 this.num,我们明确地将构造函数的参数 num 赋值给实例变量 num,解决了同名变量可能引起的混淆。

调用同一类的构造函数

在构造函数重载的情况下,可以使用 this 关键字从一个构造函数调用另一个构造函数。示例如下:

using System;

namespace ThisKeywordExample {
    class Test {
        public Test(int num1, int num2) {
            Console.WriteLine("带两个参数的构造函数");
        }

        // 使用 this 调用另一个构造函数
        public Test(int num) : this(num, 10) {
            Console.WriteLine("带一个参数的构造函数");
        }

        static void Main(string[] args) {
            Test t1 = new Test(5);
            Console.ReadLine();
        }
    }
}

输出

带两个参数的构造函数
带一个参数的构造函数

在这个示例中,Test(int num) 构造函数使用 this(num, 10) 调用了 Test(int num1, int num2) 构造函数,从而实现了构造函数的链式调用。

作为参数传递

可以使用 this 关键字将当前对象作为参数传递给类中的方法。示例如下:

using System;

namespace ThisKeywordExample {
    class Test {
        int num1;
        int num2;

        public Test() {
            num1 = 22;
            num2 = 33;
        }

        // 接受当前对象作为参数的方法
        void PassParameter(Test t1) {
            Console.WriteLine("num1: " + t1.num1);
            Console.WriteLine("num2: " + t1.num2);
        }

        public void Display() {
            // 将当前对象作为参数传递
            PassParameter(this);
        }

        static void Main(string[] args) {
            Test t1 = new Test();
            t1.Display();
            Console.ReadLine();
        }
    }
}

输出

num1: 22
num2: 33

在这个示例中,我们使用 this 将当前对象传递给 PassParameter 方法,从而在方法中访问对象的字段。

声明索引器

索引器允许对象像数组一样被索引。使用 this 关键字声明索引器。示例如下:

using System;

namespace ThisKeywordExample {
    class Student {
        private string[] names = new string[3];

        // 声明索引器
        public string this[int index] {
            get {
                return names[index];
            }
            set {
                names[index] = value;
            }
        }
    }

    class Program {
        static void Main() {
            Student s1 = new Student();
            s1[0] = "张三";
            s1[1] = "李四";
            s1[2] = "王五";

            for (int i = 0; i < 3; i++) {
                Console.WriteLine(s1[i]);
            }
        }
    }
}

输出

张三
李四
王五

在这个示例中,我们定义了一个索引器,使 Student 类的对象可以像数组一样被索引。

结语

this 关键字在C#中扮演了多个重要角色,从区分同名变量到实现构造函数链,再到将当前对象作为参数传递和声明索引器。理解并正确使用 this 关键字,可以帮助我们编写更加清晰、有效和可维护的代码。

Leave a Comment

分享此文档

this关键字

或复制链接

内容