跳到主要内容

C#如何在同一个类中实现多个具有相同方法名的接口?

参考答案:

在C#中,如果你需要在一个类中实现多个接口,并且这些接口具有相同的方法名,你不需要做任何特别的事情。C#支持接口方法的隐式实现,这意味着只要你的类包含了所有接口所需的方法签名,编译器就会自动将这些方法与接口方法关联起来。

下面是一个例子,展示了如何在同一个类中实现两个具有相同方法名的接口:

using System;

// 定义两个接口,它们都有一个名为 DoSomething 的方法
public interface IInterface1
{
    void DoSomething();
}

public interface IInterface2
{
    void DoSomething();
}

// 实现两个接口的类
public class MyClass : IInterface1, IInterface2
{
    // 实现 IInterface1 的 DoSomething 方法
    public void DoSomething()
    {
        Console.WriteLine("DoSomething from IInterface1");
    }

    // 如果你需要为 IInterface2 实现不同的 DoSomething 方法,
    // 你需要显式地实现它,使用接口名作为方法名的一部分
    void IInterface2.DoSomething()
    {
        Console.WriteLine("DoSomething from IInterface2");
    }
}

class Program
{
    static void Main()
    {
        MyClass myClass = new MyClass();

        // 直接调用 MyClass 的 DoSomething 方法,这会调用 IInterface1 的实现
        myClass.DoSomething(); // 输出 "DoSomething from IInterface1"

        // 使用接口变量调用 DoSomething 方法
        IInterface1 interface1 = myClass;
        interface1.DoSomething(); // 输出 "DoSomething from IInterface1"

        IInterface2 interface2 = myClass;
        interface2.DoSomething(); // 输出 "DoSomething from IInterface2"
    }
}

在这个例子中,MyClass 类实现了 IInterface1IInterface2,并且这两个接口都定义了一个名为 DoSomething 的方法。MyClass 只需要提供一个 DoSomething 方法的实现,这个方法会隐式地满足 IInterface1 的要求。但是,如果你想要为 IInterface2 提供不同的 DoSomething 方法实现,你需要显式地实现这个方法,如上面代码中所示。显式实现方法时,你需要将接口名作为方法名的一部分(即 IInterface2.DoSomething())。

当你通过 MyClass 的实例直接调用 DoSomething 方法时,会调用隐式实现的那个方法。但是,如果你通过接口类型的变量调用 DoSomething 方法,则会调用与该接口对应的实现(显式或隐式)。