为什么“这个”没问题,但“这个”(在另一种方法中)不是?

时间:2014-02-28 21:23:14

标签: c# asp.net

这是来自与aspx文件关联的c#.net(.aspx.cs)文件 为什么“这个”没问题,但“这个”(在另一种方法中)不是? 我包含了一个快照图像,以显示第二种方法中的红线,以显示编译器不喜欢第一种方法中没有显示错误的内容。

enter image description here

3 个答案:

答案 0 :(得分:12)

this用于引用类的当前实例 在静态方法中,没有当前实例可供引用。

在第一个示例中,它引用了Resource_Windows_ContractEdit类的当前实例 在第二个示例中,该方法是静态的,因此应该在没有类实例的情况下调用它。因此,在静态方法中,您无法使用this

C# Reference this

一个人为的例子

class Example1
{
     // static. could be used by static methods and it is shared between all instances
     private static int counter = 0;

     // instance variable, exists with different indipendent storage for every instance
     private int v;

     public Example1()
     {
          // We can use the static variable because it is shared between all instances..
          counter = counter + 1;
     }

     public int SumValue(int x)
     {
         // Sum only for the first 10 instances of this class..
         // Yes weird, but it is just a contrived example
         if(Example1.counter < 10)
             this.v = this.v + x:

         return this.v;

     }

     // Cannot use the this keyword neither the instance internal variables
     // Could use the static variables
     public static int GetCurrentInstanceCounter()
     {
         return counter;
     }
}

void Main()
{
    Example1 a = new Example1();

    // a is an instance of class Example1 and could use the this keyword
    int result = a.sumValue(10);
    Console.WriteLine(result.ToString());

    // GetCurrentInstanceCounter is static, no instance required to call it, just the class name 
    int c = Example1.GetCurrentInstanceCounter();
    Console.WriteLine("Created " + c.ToString() + " instances of Example1");
}

答案 1 :(得分:2)

因为这是一种静态方法。

关键字this是指在非静态方法成员的上下文中的类型实例。

静态成员不属于任何特定实例 - 它们属于类本身。因此,由于没有要引用的实例,因此没有this

答案 2 :(得分:1)

由于静态成员函数存在于类级别而不是对象的一部分,因此它们没有此指针。

MSDN this链接