1

我有以下代码

    class A{
            public void display()
            {
                    Console.WriteLine("In class A");
            }
    }
    class B:A{
            public void display()
            {
                    Console.WriteLine("In class B");
            }
            public static void show()
            {
                    //base.display(); gives error
            }
    }

在上面的代码中 base.display(); 给出错误。我必须在方法 show() 中调用基类方法 display() 而不创建类 A 的对象。我该怎么做?或者我不能这样做?

4

3 回答 3

5

方法static不属于实例,因此它没有base. 你只能说A.display()ifA.display()也是一种static方法。你也可以说new A().display()在调用后丢弃实例display()

于 2013-07-30T05:16:29.950 回答
3

您不能在静态方法中使用实例数据。

静态方法应该是自包含的。也就是说,它将执行其功能而不需要或保存任何有状态数据。

 class A{
            public static void display()
            {
                    Console.WriteLine("In class A");
            }
    }
      class B : A
      {
          public void display()
          {
              Console.WriteLine("In class B");
          }
          public static void show()
          {
              A.display(); 
          }
      }
于 2013-07-30T05:17:14.417 回答
2

您收到错误是因为您从不允许的静态方法调用实例方法。

这里有 3 个选项。你可以选择任何适合你的东西。

选项1。

class A{
        public void display()
        {
                Console.WriteLine("In class A");
        }
}
class B:A{
        public void display()
        {
                Console.WriteLine("In class B");
        }
        public void show()
        {
                base.display();
        }
}

选项 2:

class A{
            public static void display()
            {
                    Console.WriteLine("In class A");
            }
    }
    class B:A{
            public void display()
            {
                    Console.WriteLine("In class B");
            }
            public void show()
            {
                    A.display();
            }
    }

选项 3:

class A{
            public void display()
            {
                    Console.WriteLine("In class A");
            }
    }
    class B:A{
            public void display()
            {
                    Console.WriteLine("In class B");
            }
            public void show()
            {
                    new A().display();
            }
    }
于 2013-07-30T05:35:33.343 回答