C#中的this到底指的是什么?高手请进来。

guzhonghua 2009-05-07 03:15:15
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是怎么搞的。
希望高手解决。
...全文
1459 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
昵称不好起 2010-08-10
  • 打赏
  • 举报
回复
[Quote=引用 34 楼 lsd123 的回复:]
.
[/Quote]
学习
wym0807 2009-05-07
  • 打赏
  • 举报
回复
就是指当前页面啊,比如说页面上的空间之类的。。。
wuyq11 2009-05-07
  • 打赏
  • 举报
回复
其用于引用类的当前实例,也包括继承而来的方法,通常可以隐藏this,
this指代类对象本身,用于访问本类的所有常量、字段、属性和方法成员,而且不管访问元素是任何访问级别。因为,this仅仅局限于对象内部,对象外部是无法看到的,这就是this的基本思想。
chen870201 2009-05-07
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 wybxs2006 的回复:]
this有時相當於Page,有時可以指全局成員變量,反正具體情況具體分析
[/Quote]


UP
阿彪兄 2009-05-07
  • 打赏
  • 举报
回复
this有時相當於Page,有時可以指全局成員變量,反正具體情況具體分析
lsd123 2009-05-07
  • 打赏
  • 举报
回复
.
陌上花花 2009-05-07
  • 打赏
  • 举报
回复
就是指当前对象。
yyycccqqq 2009-05-07
  • 打赏
  • 举报
回复
广告!
十八道胡同 2009-05-07
  • 打赏
  • 举报
回复
this 关键字引用类的当前实例..
yangqidong 2009-05-07
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 guzhonghua 的回复:]
引用 17 楼 yangqidong 的回复:
引用 13 楼 guzhonghua 的回复:
如果子类调用父类中的方法,那么这个this指代的就是子类 而不是父类了
希望看此贴的 有所收获

你收获了一个错误的东西。在方法内部,this指代的一定是调用方法的对象。


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

呵呵,真是挺狂的人呢。我说的是“this指代的一定是调用方法的对象”,
也就是说子类对象不管是调用继承的方法,还是自身的方法,this都代表子类对象
soaringbird 2009-05-07
  • 打赏
  • 举报
回复
this 关键字引用类的当前实例,还可用作扩展方法的第一个参数的修饰符。

msdn说的不够明白?
xfreyes 2009-05-07
  • 打赏
  • 举报
回复
就是 “这个”
CloneCenter 2009-05-07
  • 打赏
  • 举报
回复
this 就是当前类的实例对象。
中年秃头大叔 2009-05-07
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 llsen 的回复:]
引用楼主 guzhonghua 的帖子:
this是引用当前类的一个实例。这是MSDN上说的。
下面看例子。
在aspx页面中间中写这样一个代码
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string str = this.GetType().Name;
}
}
然后把上面的代码剪切到后台代码文件中执行,你看看这两次执行str的结果一样吗?…
[/Quote]
其实就是基类的实例。直接调用也可以省写
xb_wang 2009-05-07
  • 打赏
  • 举报
回复
是分部类,不是父类和子类,最终会编译成一个类的。
llsen 2009-05-07
  • 打赏
  • 举报
回复
[Quote=引用楼主 guzhonghua 的帖子:]
this是引用当前类的一个实例。这是MSDN上说的。
下面看例子。
在aspx页面中间中写这样一个代码
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string str = this.GetType().Name;
}
}
然后把上面的代码剪切到后台代码文件中执行,你看看这两次执行str的结果一样吗?
如果一样!那么C#中的this到…
[/Quote]

和msdn上的一样啊
你看看aspx.cs文件,其实也是一个个类,然后执行的也是一个个对象,
然后this执行的就是这个类的对象
也就是这个页面了
melon23 2009-05-07
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 yangqidong 的回复:]
引用 13 楼 guzhonghua 的回复:
如果子类调用父类中的方法,那么这个this指代的就是子类  而不是父类了
希望看此贴的 有所收获


你收获了一个错误的东西。在方法内部,this指代的一定是调用方法的对象。

出现这种情况的原因是partial
[/Quote]
赞同,
在aspnet Framework 1.0 中页面文件是继承自后台编码文件的,是子类与父类的关系。
在aspnet Framework 2.0、页面文件和自后台编码文件是一种联合继承和部分类(partial class)的关系。具体可参考“aspnet揭秘 1”26页
页面.aspx和后台.cs将合成一个类
guzhonghua 2009-05-07
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 yangqidong 的回复:]
引用 13 楼 guzhonghua 的回复:
如果子类调用父类中的方法,那么这个this指代的就是子类 而不是父类了
希望看此贴的 有所收获


你收获了一个错误的东西。在方法内部,this指代的一定是调用方法的对象。

出现这种情况的原因是partial
[/Quote]

怎么都不相信我呢 我后来把ASP.NET环境撇开了
就单纯的子类父类的关系,子类调用父类的方法 方法中通过this.GetType()获得的类型是子类
明白?我以为我不理解 这个问题不理解的多了去了
真是应了我的那句话 叫做越是简单的东西就越能看出一个人的实力来 哈哈
guzhonghua 2009-05-07
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 vrhero 的回复:]
引用 11 楼 guzhonghua 的回复:
这样把上面的代码放在两个文件中 引用的类型当然也是不一样的。所以this.GetType()应该是不一样的
把上面的代码放在页面文件中 this.GetType()应该返回的类型是default.aspx类
把上面的代码放在后台文件中this.GetType()应该返回的类型是_Default类
是你理解错了...你举的例子就不对,没有default.aspx类,不存在这种类...页面只是个页面...
[/Quote]

呵呵 你可以把我的代码实例 拿去看看 你就知道结果了 别在这空想行不 大哥?
guzhonghua 2009-05-07
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 Red_Stone 的回复:]
楼主的理解有问题
【如果子类调用父类中的方法,那么这个this指代的就是子类 而不是父类了 】
子类继承了父类的方法后从逻辑上看相当于子类拥有了这个方法,并且在子类实例化时父类并非一定会提前实例化,故这时候this指的是子类实例。
其实这只是.net的实现机制罢了,到了java或许就不一样了(ps:对java的理解不深,所以只好用“或许”)。
[/Quote]

大家不要受此人误解
我看你的理解才有问题,在子类实例化的时候会先实例化父类的。
什么叫实现机制 真是郁闷 不知道就别说 好好看看我的回复
加载更多回复(19)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧