.net 在Main c#中调用实现的接口方法[重复]

wyyhbhjk  于 2023-01-03  发布在  .NET
关注(0)|答案(1)|浏览(121)
    • 此问题在此处已有答案**:

C# call interface method with default implementation(3个答案)
When should we use default interface method in C#?(2个答案)
3天前关闭。
截至3天前,社区正在审查是否重新讨论此问题。
我正在写一个可重用的程序,它包含不同的排序算法。我希望每个排序算法实现一个"打印到控制台函数"。所以我实现了一个接口:

namespace ConsoleControl
{
    interface IConsoleControlInterface
    {
        void PrintArray(int[] array)
        {
            
        }
    }
}

然后,我的BubbleSort类实现了这个接口:

using ConsoleControl;

namespace BubbleSort
{
    public class BubbleSortClass : IConsoleControlInterface
    {

由于这是一个接口,BubbleSortClass必须实现接口的函数PrintArray(int [] array):

void IConsoleControlInterface.PrintArray(int[] array)
        {
            Console.WriteLine("Printing The Array");
            foreach (var item in array)
            {
                Console.Write(item + " ");
            }
        }

但是我如何在Main()中调用这个方法呢?

BubbleSort.BubbleSortClass arrayToBeSorted2 = new BubbleSort.BubbleSortClass(10);
        arrayToBeSorted2.InitializeArray();
        arrayToBeSorted2.PrintArray(arrayToBeSorted2.array);

但是编译器显示PrintArray函数不存在,如何修复?
我尝试从对象arrayToBeSorted2.PrintArray调用它,我假设简单调用PrintArray(...)不会起作用,因为此函数未标记为静态

tzxcd3kk

tzxcd3kk1#

这里有explicitly implementedIConsoleControlInterface.PrintArray,在这种情况下,强制转换(IConsoleControlInterface)arrayToBeSorted2将显示您所期望的方法PrintArray
除非您有明确的理由要显式实现一个接口,否则prefer implicit implementation就是
void PrintArray(int[] array) {...
这将消除为了"看到"方法而将类强制转换到适当接口的需要。
希望这有帮助!

相关问题