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);
    }

}

这段代码有点绕(来至 张逸:晴窗笔记做了部分改动),大家可以想行为什么会是那样的结果。
对于this做为声明索引器的用法在这里先不说(PS:我也还没学 )。

转载于:https://www.cnblogs.com/Lyhik/archive/2007/11/30/978000.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值