Kes*_*p K 1 c# overriding interface class multiple-inheritance
如何在继承两个接口的类中重写两个不同接口中具有相同名称和签名的函数。是否可以 ?
注:这是我被问到的一个面试问题。
例子:
interface example1
{
int add(int a, int b);
}
interface example2
{
int add(int a, int b);
}
public class cls : example1, example2
{
public int add(int a, int b)
{
int c = a + b;
return c;
}
}
Run Code Online (Sandbox Code Playgroud)
当我们有两个或多个具有相同方法的接口时,有多种选择:
我们可以使用显式接口实现:
public class cls : example1, example2 {
// note abscence of "public", the method efficiently private
int example1.add(int a, int b) => a + b;
// note abscence of "public", the method efficiently private
int example2.add(int a, int b) => Math.Abs(a) + Math.Abs(b);
}
Run Code Online (Sandbox Code Playgroud)
该调用想要转换到所需的接口:
var demo = new cls();
Console.Write($"{((example1)demo).add(2, -3)} : {((example2)demo).add(2, -3)}");
Run Code Online (Sandbox Code Playgroud)
如果我们有某种方法add作为默认行为(例如example1),我们只能使用显式接口实现example2:
public class cls : example1, example2 {
public int add(int a, int b) => a + b;
int example2.add(int a, int b) => Math.Abs(a) + Math.Abs(b);
}
Run Code Online (Sandbox Code Playgroud)
现在,只有在以下情况下才需要调用example2:
var demo = new cls();
Console.Write($"{demo.add(2, -3)} : {((example2)demo).add(2, -3)}");
Run Code Online (Sandbox Code Playgroud)
最后,如果两个接口共享相同的方法:
public class cls : example1, example2 {
// Both interfaces example1 and example2 share the same method
public int add(int a, int b) => a + b;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
113 次 |
| 最近记录: |