是否可以覆盖同一类(不是派生类)中的基类中的方法?

Gib*_*boK 6 .net c# asp.net oop

我的理解是可以Virtual使用关键字从派生类覆盖基类中的方法(标记为)override.

但是在同一个类中重写一个方法呢?

在我的具体情况下,我有一个x有2种方法的类.方法a具有一些常见的行为b,并b为方法添加功能a.

在过去,我复制了ain 的代码b并添加了新功能b.

我想知道是否有更好的方法,所以我可以集中方法的行为a.

    public class x
    {
       public static void a() {}
       public static void b() {}         
    }
Run Code Online (Sandbox Code Playgroud)

Dan*_*elB 11

您只需在方法中调用a()方法即可b().不需要(也没办法)覆盖方法.

public class x
{
   private static int _i = 0;

   public static void a() {
       _i = 1;
   }
   public static void b() {
       a();
       // here is _i = 1;
   }         
}
Run Code Online (Sandbox Code Playgroud)

另一方面,您可以为您的方法设置参数重载.

public class x
{
   private static int _i = 0;

   public static void a() {
       a(1);
   }
   public static void a(int i) {
      _i = t;
      // common code which can use _i
   }         
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您可以调用a(1)a()使用相同的结果.


Ton*_*ion 9

您不能在同一个类中覆盖,只能在派生类中执行此操作.您可以将方法的常见行为放在方法a中,然后从方法b中调用它.

public static void a() 
{
// some common functionality
}

public static void b()
{
// do something
a(); //call a
//do something else
}
Run Code Online (Sandbox Code Playgroud)

您可以根据需要多次从b内拨打电话.