c# - 如何继承两个或多个具有相同方法名的接口,派生类应进一步继承到C#中的另一个类中
问题描述
我们如何在类中实现两个或多个具有相同方法名称的接口,并且派生类应该进一步继承到具有相同方法的新类中。
using System;
interface A
{
void Hello();
}
interface B
{
void Hello();
}
class Test : A, B
{
void A.Hello()
{
Console.WriteLine("Test Hello-A");
}
void B.Hello()
{
Console.WriteLine("Test Hello-B");
}
}
class Demo : Test {
//what will be the code to override Hello method
}
public class MainClass
{
public static void Main()
{
//How can we access the Hello method of Test & Demo class
}
}
解决方案
使用显式接口实现时存在一些限制,因为方法不能是virtual
. 但是您可以通过创建更多可以是虚拟的方法然后覆盖它们来解决此问题。
我对这段代码不太满意,但它完全回答了你的问题。
using System;
interface A
{
void Hello();
}
interface B
{
void Hello();
}
class Test : A, B
{
public virtual void HelloA()
{
Console.WriteLine("Test Hello-A");
}
public virtual void HelloB()
{
Console.WriteLine("Test Hello-A");
}
void A.Hello()
{
this.HelloA();
}
void B.Hello()
{
this.HelloB();
}
}
class Demo : Test
{
//what will be the code to override Hello method
public override void HelloA()
{
}
public override void HelloB()
{
}
}
public class MainClass
{
public static void Main()
{
//How can we access the Hello method of Test & Demo class
Test test = new();
test.HelloA();
test.HelloB();
Demo demo = new();
demo.HelloA();
demo.HelloB();
// Another option will be to call it using the interfaces:
List<A> itemsA = new();
itemsA.Add(test);
itemsA.Add(demo);
foreach (A itemA in itemsA)
{
itemA.Hello();
}
List<B> itemsB = new();
itemsB.Add(test);
itemsB.Add(demo);
foreach (B itemB in itemsB)
{
itemB.Hello();
}
}
}
推荐阅读
- oracle - 如何在 soa 12c bpel 中使变量为空
- json - Join on value from object in jsonb array
- python - 将 UNIX 时间快速转换为人类可读时间
- javascript - 我正在尝试从 Node JS/Express 连接到 postgres 数据库。邮递员没有回应
- vb.net - 如何禁用 RichTextBox 颜色/大小更改属性?
- java - 使用 Arrays 库对 int 数组进行合并排序
- php - 字节数组转储数据打印为字符串python
- rxjs - 等待状态变化导致重复动作发出
- graphql - 我们应该如何在 Apollo GraphQL 中设置多对多关系
- python-3.x - 在字符串中搜索字符