C#学习笔记--this关键字

MSDN中的定义:引用,类的当前实例.或者是说对类的当前实例的引用,这样可能更顺口一些,而这里的类就是指包含关键字this的那个类.之所以把this关键字放在类这个分类里面,是因为this只能在类的内部使用,使用他能访问类实例对象内部任何级别(不同类型的访问修饰符)的任何元素 (字段,属性,方法等),但静态的类型的成员不能访问,因为静态成员不属于对象的一部分。MSDN里面是这样介绍this关键字的:用来引用类的当前实 例。这句话说的很精简,我觉得重点是“当前实例”这四个字,下面我说说我个人的理解。
    大家都知道类的定义只是描述了一种数据结构,或者说一种自定义的数据类型,并不能那来直接使用,需要实例化成对象。一个类可以实例化成很多对象, 每个对象都是不同的实体(个人觉得这些对象最大的不同就是字段里面所包含的数据的不同),对this的理解可以转换成对一个类不同实例对象的理解,下面我 给出具体的演示代码。
class A
{
    
int i;
    
public A(int i)
    
{
        
this.i = i;  //注意这里的用法,在后面我会解释
    }

    
public void displayI()
    
{
        Console.WriteLine(
this.i.ToString());
    }

}

class RUN
{
    
static void Main()
    
{
        A a1 
= new A(1);
        A a2 
= new A(2);
        a1.displayI();
        a2.displayI();
    }

}
这个例子我想应该很能说明什么是对类的当前实例(对象)的引用了。类A的成员方法displayI的作用是现实成员属性的值,那么this就会根据是那个对象调用了displayI()而显示调用对象的i的值。
    除了上面说的this还有另外两种用法,这两种用法也都是基于对上面的理解。一是用来区分当方法参数和数据成员同名时的情况。具体的看上面例子中 有注释的那一行。二是把对象作为参数传递到其他的地方。如:ohter(this);这other一般应该是类的内部或其他类定义的方法。
public class Vistor
{
    
string i = "Vistor";
    
public void Visit(Element e)
    
{
        Console.WriteLine(
"I was {0}.", e.GetType());
        Console.WriteLine(
"I was {0}."this.i);
    }

}

public class Element
{
    
string i = "Element";
    
public void Accept(Vistor v)
    
{
        v.Visit(
this);//把对象自身同过Visit方法传出去
    }

}

class RUN
{
    
static void Main()
    
{
        Vistor v 
= new Vistor();
        Element e 
= new Element();
        e.Accept(v);
    }

}

posted on 2008-05-27 16:37  Re2x  阅读(103)  评论(0编辑  收藏  举报