新建控制台程序,写个方法,在main方法中调用的时候,不能使用this直接调用。
但是在web项目中,我们在页面的后台代码(xx.aspx.cs)里却可以使用this调用该.cs里的方法。谁能告诉我这是为什么吗?
this表示当前类的实例,面向对象的基本理论。
main方法是程序的入口,前面有个static 静态方法,不依赖于任何对象实例,所以不能用。
你在webform某个页面中使用this,其实是那个页面类的实例...
this跟程序是控制台程序还是web程序没有关系。this的含义是当前对象的实例,举例:
class A { private string name; public void M() { this.name = "hi"; } }
当你创建一个实例:A a = new A(); 并且调用 a.M() 时,M里的那个this就代表当前实例a。而静态方法是不需要实例就可以调用的(这就是为什么你在main方法中不能用this,因为main方法是静态的),还是上面那个class A,我修改成:
class A { private string name; public static void M() { //现在M是静态方法了 } }
那么就可以直接调用 A.M() 来执行这个方法,并不需要一个A的实例(上面代码中的a)了。因此在静态方法中不能使用this。
那为什么在xx.aspx.cs类文件里,就可以直接使用this呢?
@冰点の爱: xx.aspx.cs,里面也定义了一个类,你可以看到类似:
pubilc partial class MyPage : System.Web.UI.Page { //这也是一个类 public void Page_Load() { //这是一个实例方法 //这里的this代表MyPage的一个实例 } }
@水牛刀刀: 我的疑问就在这儿,这里为什么就可以直接使用this呢?
因为main方法是静态方法,静态方法不能使用this