黑马程序员技术交流社区

标题: this关键字到底怎么理解? [打印本页]

作者: 钟炳杰    时间: 2013-1-25 23:05
标题: this关键字到底怎么理解?
本帖最后由 钟炳杰 于 2013-1-26 14:19 编辑

视频教程中老师经常使用this来表示当前变量或者当前事件,但是很多时候都会混淆,比如在调用事件的时候this又表示什么。你们是怎么理解this的,该怎么去理解?

作者: 许庭洲    时间: 2013-1-26 07:53
保留字this仅限于在构造函数,类的方法和类的实例中使用,它有以下含义:
1.在类的构造函数中出现的this作为一个值类型,它表示对正在构造的对象本身的引用;
2.在类的方法中出现的this作为一个值类型,它表示对调用该方法的对象的引用;
3.在结构的构造函数中出现的this作为一个变量类型,它表示对正在构造的结构的引用;
4.在结构的方法中出现的this作为一个变量类型,它表示对该方法的结构的引用;



作者: 张世钦    时间: 2013-1-26 07:54
本帖最后由 zhangshisk 于 2013-1-26 08:03 编辑

我的理解是这样的:
函数中this代表当前对象的引用:
也就是说谁调用了this所在的函数,this代表谁.

举个例子
class test{
     public static void main(String[] args)
     {
              zi z = new zi();
              z.setNum(10);
      }
}

class fu{}

class zi extends fu
{
    int num = 0;
    setNum(int num)
     {
            this.num = num;//在这里,this.num代表子类对象的num属性;而num是调用setNum方法时传入的数据.
     }

}
作者: 贾文泽    时间: 2013-1-26 09:31
其实,在定义类的实例方法(并非类的方法,而是属于对象的方法)时,每个实例方法都可以使用一个名为this的变量,该变量引用了当前的对象,供自己的方法内部代码中使用,可以通过this获得当前对象的属性值,也可以调用自身对象的其他方法。
也就是说this只是一种用法而已,因为在运行一个方法时,方法指令所在的空间和对象存在的空间并不一致,而且一个类同时可能存在很多实例,因此在通过一个变量执行所引用的对象的一个方法时,运行时环境会自动地将该对象的引用值传入方法中的this,这样在方法执行时,当需要使用所引用对象的属性或其他方法时,就可以通过this找到对象。

作者: 罗志强    时间: 2013-1-26 09:45
this很好理解的,一开始我也觉得很难理解,现在觉得蛮好,this意思就是本类,或者当前对象的意思,在构造函数中意思就是调用当前类中的构造函数

//这是完整的实例化代码,下面this就派上用场了,
        public Teacher(string name, int age, char gender)  
            : base(name, age, gender)
        {
            this.Name = name;
            this.Age = age;
            this.Gender = gender;
        }
        public Teacher(string name):this(name,0,null)
        {
        }
        public Teacher(int age):this(null,age,null)
        {
        }
        public Teacher(string name, int age):this(name,age,null)
        {
        }
//从上面构造函数中  我们发现,下面信息输入不完整的构造函数,其实每次都调用了最上面最全个人信息的构造函数,这样,我们就不能每一个构造函数中都写this.Name;this.Age=age;了 ,这样也减少了部分代码量了

这是我写的关于this与base的博客地址,希望对你有帮助http://www.cnblogs.com/showstyle/archive/2013/01/18/2866823.html
作者: 钟炳杰    时间: 2013-1-26 14:15
ShowStyle 发表于 2013-1-26 09:45
this很好理解的,一开始我也觉得很难理解,现在觉得蛮好,this意思就是本类,或者当前对象的意思,在构造函 ...

不错啊,很全面
作者: 罗志强    时间: 2013-1-26 14:20
钟炳杰 发表于 2013-1-26 14:15
不错啊,很全面

呵呵!你能看明白那是最好的啦
作者: 王德钊    时间: 2013-1-27 01:29
不同地方,意义不同。this 关键字将引用类的当前实例。this 关键字可用于从构造函数、实例方法和实例访问器中访问成员。
它可以用来 限定被相似的名称隐藏的成员,例如: public Employee(string name, string alias) {   this.name = name;   this.alias = alias;}或者将对象作为参数传递到其他方法,例如: CalcTax(this);再或者可以声明索引器,例如: public int this [int param]{      get      {         return array[param];      }      set      {         array[param] = value;      }   }
但是要注意。在静态方法、静态属性访问器或字段声明的变量初始值设定项中引用 this 是错误的。
作者: 丁涧泉    时间: 2013-1-27 04:59
许庭洲 发表于 2013-1-26 07:53
保留字this仅限于在构造函数,类的方法和类的实例中使用,它有以下含义:
1.在类的构造函数中出现的this作 ...

我的概念对this的理解,只是引用当前的对象,那怎么理解什么是当前的对象呢,难道就是正在构造的对象,那什么又是正在构造的对象呢?还有就是,在面向对象中,一切皆对象,这里的对象都是某个类的实例,既然类是引用类型,它的对象必然也是引用类型,那么this却又是值类型的,这该怎么理解呢?老师,能以代码的形式说明和阐述么,不知道我的问题可问清楚了:谢谢
作者: 许庭洲    时间: 2013-1-27 19:17
丁涧泉 发表于 2013-1-27 04:59
我的概念对this的理解,只是引用当前的对象,那怎么理解什么是当前的对象呢,难道就是正在构造的对象,那什么 ...

using System;
class A
{
    public int x;
    public void Main()
   {
        x=5;
        Console.WriteLine("The value of x is : {0}",x);
         Console.WriteLine("The value of this.x is : {0}",this.x);
    }
}

程序运行的结果应该是:
The value of x is :5
The value of this.x is :5



作者: 丁涧泉    时间: 2013-1-28 06:11
许庭洲 发表于 2013-1-27 19:17
using System;
class A
{

老师那我换个问法,在你给的代码中,x是int值类型的,this此时代表的是A的对象是否可以这么理解this等于A a =new A();呢?this所表示的就是a这个具体的对象呢?还有就是this作为值类型,在引用一个引用类型的变量,是否在后台,编译中有装箱和拆箱的操做呢?this关键字的使用有哪些优点呢?老师别嫌烦啊...在学校学的时候只会用...郁闷
作者: 许庭洲    时间: 2013-1-28 07:29
丁涧泉 发表于 2013-1-28 06:11
老师那我换个问法,在你给的代码中,x是int值类型的,this此时代表的是A的对象是否可以这么理解this等于A a  ...

1. 实际上,在C#内部,this被定义为一个常量。因此,使用this++,this--这样的语句都是不合法的。但是,this 可以作为返回值来使用;
2.对值类型进行装箱时,必须分配并构造一个新对象。次之,取消装箱所需的强制转换也需要进行大量的计算。
3.如果你是一名C++程序员,在使用C#时请忘记C++中的this指针,也忘掉诸如this->和::之类的符号。只要有名字嵌套的概念,你使用“."就足够了。
作者: 丁涧泉    时间: 2013-1-30 00:57
许庭洲 发表于 2013-1-28 07:29
1. 实际上,在C#内部,this被定义为一个常量。因此,使用this++,this--这样的语句都是不合法的。但是,th ...

谢谢老师,我不是一个c++程序员,对与第三条我理解不了...看来真得用心去学,谢谢老师了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2