this是引用当前类的一个实例。这是MSDN上说的。
下面看例子。
在aspx页面中间中写这样一个代码
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
               string str = this.GetType().Name;
            }
        }
然后把上面的代码剪切到后台代码文件中执行,你看看这两次执行str的结果一样吗?
如果一样!那么C#中的this到底指的是什么呢?这个时候的this是引用的谁呢?
我们知道页面文件是继承自后台编码文件的,是子类与父类的关系。那为什么通过this.GetType()获得的是一个类型呢。这不知道.NET是怎么搞的。
希望高手解决。

解决方案 »

  1.   

    相当于VB中的ME,指当前页面。
      

  2.   

    this 关键字就是引用类的当前实例啊.但是注意由于静态成员函数存在于类一级,并且不是对象的一部分,因此没有 this 指针,在静态方法中引用 this 是错误的。 
      

  3.   

    结果一样。this是当前类的实例,GetType().Name是子类的类名。
      

  4.   


    第一句话就错:是当前类的实例 
    因为类不同 引用当然也不同  可是为什么一样的呢举个例子大家看看吧
    Default.aspx页面文件 会生成一个default.aspx的类 并且此类是继承自后台_Default类的
    后台对应的类是
    public partial class _Default : System.Web.UI.Page
    {}这样把上面的代码放在两个文件中 引用的类型当然也是不一样的。所以this.GetType()应该是不一样的
    把上面的代码放在页面文件中 this.GetType()应该返回的类型是default.aspx类
    把上面的代码放在后台文件中this.GetType()应该返回的类型是_Default类而我运行测试的结果却是一样的 都是default.aspx类
    大家说说这是为什么吧!
      

  5.   

    刚才通过一个例子 明白了  this指的是什么  
    调用当前方法 或事件 或其他的 实例  
    不是当前类的实例
    如果子类调用父类中的方法,那么这个this指代的就是子类  而不是父类了
    希望看此贴的 有所收获  
    就是往往基础的问题  才能显示出一个的实力
      

  6.   

    在aspnet Framework 1.0 中页面文件是继承自后台编码文件的,是子类与父类的关系。
    在aspnet Framework 2.0、页面文件和自后台编码文件是一种联合继承和部分类(partial class)的关系。具体可参考“aspnet揭秘 1”26页
      

  7.   

    楼主的理解有问题
    【如果子类调用父类中的方法,那么这个this指代的就是子类  而不是父类了 】
    子类继承了父类的方法后从逻辑上看相当于子类拥有了这个方法,并且在子类实例化时父类并非一定会提前实例化,故这时候this指的是子类实例。
    其实这只是.net的实现机制罢了,到了java或许就不一样了(ps:对java的理解不深,所以只好用“或许”)。
      

  8.   

    是你理解错了...你举的例子就不对,没有default.aspx类,不存在这种类...页面只是个页面...
      

  9.   


    你收获了一个错误的东西。在方法内部,this指代的一定是调用方法的对象。出现这种情况的原因是partial
      

  10.   

    是指當前類的實例。
    我們新建任何一個Web頁面時,其實就是新建了一個類,this 就等同於這個類的實例。
      

  11.   


    怎么都不相信我呢  我后来把ASP.NET环境撇开了
    就单纯的子类父类的关系,子类调用父类的方法  方法中通过this.GetType()获得的类型是子类
    明白?我以为我不理解  这个问题不理解的多了去了
    真是应了我的那句话 叫做越是简单的东西就越能看出一个人的实力来 哈哈
      

  12.   

    赞同,
    在aspnet Framework 1.0 中页面文件是继承自后台编码文件的,是子类与父类的关系。
    在aspnet Framework 2.0、页面文件和自后台编码文件是一种联合继承和部分类(partial class)的关系。具体可参考“aspnet揭秘 1”26页
    页面.aspx和后台.cs将合成一个类
      

  13.   


    和msdn上的一样啊
    你看看aspx.cs文件,其实也是一个个类,然后执行的也是一个个对象,
    然后this执行的就是这个类的对象
    也就是这个页面了
      

  14.   

    this 就是当前类的实例对象。
      

  15.   

    this 关键字引用类的当前实例,还可用作扩展方法的第一个参数的修饰符。msdn说的不够明白?
      

  16.   


    呵呵,真是挺狂的人呢。我说的是“this指代的一定是调用方法的对象”,
    也就是说子类对象不管是调用继承的方法,还是自身的方法,this都代表子类对象
      

  17.   

    this 关键字引用类的当前实例..
      

  18.   

    this有時相當於Page,有時可以指全局成員變量,反正具體情況具體分析
      

  19.   

    其用于引用类的当前实例,也包括继承而来的方法,通常可以隐藏this,
    this指代类对象本身,用于访问本类的所有常量、字段、属性和方法成员,而且不管访问元素是任何访问级别。因为,this仅仅局限于对象内部,对象外部是无法看到的,这就是this的基本思想。