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

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 指针的用法和注意事项进行了介绍。同时对它的必用场景和不推荐的场景进行了介绍。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值