📌  相关文章
📜  C#|如何实现具有相同方法名称的多个接口(1)

📅  最后修改于: 2023-12-03 15:14:28.623000             🧑  作者: Mango

C# 如何实现具有相同方法名称的多个接口

在 C# 编程中,我们有时会遇到这样的情况:需要一个类实现多个接口,这些接口中有相同名称的方法。为了避免冲突,我们需要使用一些技巧来实现。

常规方式 - 显式实现接口

最常规的方式是使用显式实现接口。这样做的好处是可以将方法名区分开来,提高代码的可读性。

例如,我们定义了两个接口:

public interface IFoo
{
    void Bar();
}

public interface IBar
{
    void Bar();
}

现在,我们需要一个类实现这两个接口:

public class MyClass : IFoo, IBar
{
    void IFoo.Bar()
    {
        Console.WriteLine("IFoo.Bar");
    }

    void IBar.Bar()
    {
        Console.WriteLine("IBar.Bar");
    }
}

注意,我们在实现接口时使用了类名和接口名来显式地表示实现哪个接口。这样做的结果是,我们不能直接使用类名来调用方法。我们需要使用接口名来调用方法:

MyClass myClass = new MyClass();

((IFoo)myClass).Bar(); // 输出 "IFoo.Bar"
((IBar)myClass).Bar(); // 输出 "IBar.Bar"
非常规方式 - 使用默认接口实现

在 C# 8 中,引入了默认接口实现的功能。利用这个功能,我们可以为接口中的方法提供默认实现。这样做的好处是可以减少冗余代码,并且使代码更加简洁。

例如,我们定义了两个接口:

public interface IFoo
{
    void Bar() => Console.WriteLine("IFoo.Bar");
}

public interface IBar
{
    void Bar() => Console.WriteLine("IBar.Bar");
}

现在,我们需要一个类实现这两个接口:

public class MyClass : IFoo, IBar
{
}

注意,我们没有实现任何方法,因为我们已经在接口中提供了默认实现。现在,我们可以直接使用类名来调用方法:

MyClass myClass = new MyClass();

myClass.Bar(); // 输出 "IFoo.Bar"

这样做只有在两个接口中的方法实现是一样的时才能使用。

总结

以上是两种常见的方式来实现具有相同方法名称的多个接口。无论使用哪种方式,都需要考虑到代码的可读性和维护性。