关于this指针的使用注意事项详解

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43145361/article/details/100063738

this 指针简介

在面向对象的程序设计语言中,都有一个默认的this关键字。这个关键字的作用就是代表当前对象,可以通过 this 引用所有的类内的全局变量或方法。但是 this 指针在使用的时候,有很多要注意的地方,如果不注意的话,会造成滥用带来未知的麻烦。

使用限制

  • 只能在非静态方法中使用,包括普通方法和构造函数;
  • 可以引用所有的类的成员,包括字段和方法;
  • 只能在方法体内使用,包括普通方法和构造函数。

必需使用的场景

在带有构造函数中,如果传入参数与类的成员变量名称一致时,必需要使用 this 指针进行区分。举例来说,如下代码所示,在 Person 的构造函数中,由于传入的参数 name 与类的成员变量 name 是一样的。根据就近优先的原则,如果不加 this 那么 name 默认指的是传入参数,只有要加上 this 指针后,才会调用 Person 类的 name 字段。

class Person{
    String name;
    public Person(String name){ 
        this.name = name;
    }
}

不推荐使用的场景

由于主流的编辑器,如VS,XCode,Eclipse等都提供了代码补全功能,所以很多人为了编写省事,都会先写一个 this 然后加上点以后,会弹出可以调用的代码补全,于是代码中的很多类的成员变量都有一个 this.,如 this.name

现代代码编写的一个重要原则是简单至上(参见KISS原则),所以只有在 this 有意义的时候才应该使用它,多余的 this 除了没有用,在某些时候也会带来一定的麻烦。我们以下面的示例来说。

public void SetText(string txt){
    if(!string.IsNullOrEmpty(txt))
        this.button1.Text = txt;
}

在以上的代码中,我们编写了一个函数,用于给 button1.Text 赋值。后来我们发现,很多按钮都有这个需求,由于我们就修改这个函数,变为能用的函数,修改后代码如下:

public void SetText(Button button1, string txt){
    if(!string.IsNullOrEmpty(txt))
        this.button1.Text = txt;
}

以上的代码如果放在类中仍然是没问题的,可以 供所有的按钮使用,但是如果把这个方法抽出来放到一个专门的类中,或者把这个方法变成静态方法,那么都会因为 this. 而导致这个函数出错。

也许有人觉得就一个 this. 不多,改一下就好。但是如果方法体中有大量的 this.,或者有多个方法需要重构的时候,就会给我们带来多余的麻烦。而且,这本来就是多余的时候,在开始的时候就不应该让它出现。

总结

在面向对象程序设计语言中,this 指针是都有的一个重要的关键字,本文对 this 指针的用法和注意事项进行了介绍。同时对它的必用场景和不推荐的场景进行了介绍。

猜你喜欢

转载自blog.csdn.net/weixin_43145361/article/details/100063738