C#:在覆盖像Java这样的方法时替换参数的子类/子类型?

时间:2016-05-18 03:21:35

标签: java c# oop interface

在java中,我可以这样做:

public class A {
    //...
}

public class B extends A {
    //...
}

public interface I {
    void test(A a);
}

public class C implements I {
    //i can use class B as parameters in java but how to do in .net ?
    // not work in .net
    @override
    public void test(B b){

    }
}

我可以在B中使用B类作为参数,但在.net中怎么做?

1 个答案:

答案 0 :(得分:0)

为了实现接口成员I.test(A a)test()的{​​{1}}方法必须是公共的,非静态的,并且与接口成员具有相同的名称和签名。

C无法使用一个标准:它与C.test的签名不同。

选项1:实施接口

I.test

当然,您仍然可以将public class A { //... } public class B extends A { //... } public interface I { void test(A a); } public class C implements I { public void test(A a){ } } 个实例传递到B

C.test

选项2:更改界面

说明var b = new B(); var c = new C(); c.test(b);//works just fine I的实施取决于C上的属性,而不是B上的属性。进一步假设只要传入的参数扩展AI.test是一种完全有效的写入方法是有意义的。

在这种情况下,你可以尝试这样的事情:

A

利用generics以及generic type constraints,似乎可能会更接近你想要表达/完成的内容。