C#重载和覆盖方法

时间:2018-03-27 10:44:57

标签: c# override overloading

我有一个扩展另一个类的类,我想覆盖和重载一个方法,就像在构造函数中完成一样。

像这样的东西(这只是为了说明我想要的东西):

public class A {
    someMethod(int i){
        //Do something
    }
}

public class B : A {
     someMethod(int i, int j) : base(i){
         //Do something more
     }
}

我怎样才能重现这样的东西?

1 个答案:

答案 0 :(得分:0)

您可以在子类中调用继承的方法,这种方法将被称为重载(添加具有相同名称但不同参数的方法):

public class A 
{
    // note that the method must not be private 
    // in order to be able to call it from intherited classes
    protected void someMethod(int i){
        //Do something
    }
}

public class B : A {
     // however, this class may be private of it needs to be
     void someMethod(int i, int j) 
     {
         this.someMethod(i); 
         // Do something more
     }
}

你也可以写base.someMethod(i);或者根本不写任何说明符,因为它是多余的,但就个人而言,我发现this比省略说明符更明确。在这种特殊情况下,它并不重要。

但是,如果使用this覆盖继承类中的方法(或省略说明符),则在使用base时调用重写的方法将调用实现基类,所以你可能想要注意那个细节。

只是指出差异。 重载就像"交换"或者更具体地说,修改或扩展继承类中的实现,同时保留方法的原始签名(名称和参数):

public class A 
{
    // again, note that the method must not be private 
    // in order to be able to call it from intherited classes
    protected virtual void someMethod(int i){
        //Do something
    }
}

public class B : A {
     protected override void someMethod(int i) 
     {
         this.someMethod(i); 
         // Do something more
     }
}