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是怎么搞的。
希望高手解决。
下面看例子。
在aspx页面中间中写这样一个代码
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string str = this.GetType().Name;
}
}
然后把上面的代码剪切到后台代码文件中执行,你看看这两次执行str的结果一样吗?
如果一样!那么C#中的this到底指的是什么呢?这个时候的this是引用的谁呢?
我们知道页面文件是继承自后台编码文件的,是子类与父类的关系。那为什么通过this.GetType()获得的是一个类型呢。这不知道.NET是怎么搞的。
希望高手解决。
第一句话就错:是当前类的实例
因为类不同 引用当然也不同 可是为什么一样的呢举个例子大家看看吧
Default.aspx页面文件 会生成一个default.aspx的类 并且此类是继承自后台_Default类的
后台对应的类是
public partial class _Default : System.Web.UI.Page
{}这样把上面的代码放在两个文件中 引用的类型当然也是不一样的。所以this.GetType()应该是不一样的
把上面的代码放在页面文件中 this.GetType()应该返回的类型是default.aspx类
把上面的代码放在后台文件中this.GetType()应该返回的类型是_Default类而我运行测试的结果却是一样的 都是default.aspx类
大家说说这是为什么吧!
调用当前方法 或事件 或其他的 实例
不是当前类的实例
如果子类调用父类中的方法,那么这个this指代的就是子类 而不是父类了
希望看此贴的 有所收获
就是往往基础的问题 才能显示出一个的实力
在aspnet Framework 2.0、页面文件和自后台编码文件是一种联合继承和部分类(partial class)的关系。具体可参考“aspnet揭秘 1”26页
【如果子类调用父类中的方法,那么这个this指代的就是子类 而不是父类了 】
子类继承了父类的方法后从逻辑上看相当于子类拥有了这个方法,并且在子类实例化时父类并非一定会提前实例化,故这时候this指的是子类实例。
其实这只是.net的实现机制罢了,到了java或许就不一样了(ps:对java的理解不深,所以只好用“或许”)。
你收获了一个错误的东西。在方法内部,this指代的一定是调用方法的对象。出现这种情况的原因是partial
我們新建任何一個Web頁面時,其實就是新建了一個類,this 就等同於這個類的實例。
怎么都不相信我呢 我后来把ASP.NET环境撇开了
就单纯的子类父类的关系,子类调用父类的方法 方法中通过this.GetType()获得的类型是子类
明白?我以为我不理解 这个问题不理解的多了去了
真是应了我的那句话 叫做越是简单的东西就越能看出一个人的实力来 哈哈
在aspnet Framework 1.0 中页面文件是继承自后台编码文件的,是子类与父类的关系。
在aspnet Framework 2.0、页面文件和自后台编码文件是一种联合继承和部分类(partial class)的关系。具体可参考“aspnet揭秘 1”26页
页面.aspx和后台.cs将合成一个类
和msdn上的一样啊
你看看aspx.cs文件,其实也是一个个类,然后执行的也是一个个对象,
然后this执行的就是这个类的对象
也就是这个页面了
呵呵,真是挺狂的人呢。我说的是“this指代的一定是调用方法的对象”,
也就是说子类对象不管是调用继承的方法,还是自身的方法,this都代表子类对象
this指代类对象本身,用于访问本类的所有常量、字段、属性和方法成员,而且不管访问元素是任何访问级别。因为,this仅仅局限于对象内部,对象外部是无法看到的,这就是this的基本思想。