C# 中this关键字的作用

1. 代表当前类的对象

当我们想实现通过调用方法去修改name的值,以下代码中的方法是有问题的。

首先在以下代码中,我们会发现有2个“name”,那么代码中“name = name”都是指哪个name?

当字段和变量名同名的时候,就近原则,所以说“name = name”都是指的是方法的参数name,而不是字段name。

private string name;
public void SetName(string name)
{
  name = name;
}

若想实现我们的目标,只需添加一个关键字“this”,this调用的是成员变量,该例子即字段name.

private string name;
public void SetName(string name)
{
  this.name = name;
}

2. 串联构造函数

查看以下代码会发现,有很多部分是重复的,代码是冗余的,那么如何解决这个问题呢?

    class Student
    {
        string Name;
        int Age;
        char Gender;
        int Chinese;
        int Math;
        int English;

        public Student(string name,int age,char gender,int chinese,int math,int english)
        {
            this.Name = name;
            this.Age = age;
            this.Gender = gender;
            this.Chinese = chinese;
            this.Math = math;
            this.English = english;
        }

        public Student(string name,int chinese, int math, int english)
        {
            this.Name = name;
            this.Chinese = chinese;
            this.Math = math;
            this.English = english;
        }

        public Student(string name, int age, char gender)
        {
            this.Name = name;
            this.Age = age;
            this.Gender = gender;
        }
    }

在一个类中如果需要实现多个自定义构造函数,通常做法是在构造函数中实现各自的业务逻辑,如果这些业务逻辑的实现并非截然不同的话,极不利于维护,当然,我们也可以通过将相同的逻辑部分封装成一个方法,但还有一种更为合理简单的方法,下面就通过this关键字来实现串联构造函数做的先前代码的简化。

 class Student
    {
        string Name;
        int Age;
        char Gender;
        int Chinese;
        int Math;
        int English;

        public Student(string name,int age,char gender,int chinese,int math,int english)
        {
            this.Name = name;
            this.Age = age;
            this.Gender = gender;
            this.Chinese = chinese;
            this.Math = math;
            this.English = english;
        }

        //对于不属于该构造函数的参数age和gender随意写入只要格式没有问题即可
        public Student(string name,int chinese, int math, int english):this(name,0,'0',chinese,math,english)
        {
            
        }
       //同上,对于不属于该构造函数的参数chinese、math和english随意写入只要格式没有问题即可
        public Student(string name, int age, char gender) : this(name, age, gender, 0, 0, 0)
        {
           
        }

当执行如下主程序的时候,程序调用顺序如下:

  1. 调用类中的构造函数 public Student(string name,int chinese, int math, int english);
  2. 因为有了“ :this ”的存在,接下来调用 public Student(string name,int age,char gender,int chinese,int math,int english);
  3. 最后执行public Student(string name,int chinese, int math, int english);{ 最后执行的内容 }中,中括号里面的内容
 class Program
    {

        static void Main(string[] args)
        {
            Student per1 = new Student("小李", 78, 88, 90);
        }
    }

3. 通过this实现原始类型的扩展(不常用,后续讲解)

4. 通过this实现索引器,可用于优化程序性能(不常用,后续讲解)

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机器人自动化控制

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值