接口实现中的公共元素

Hui*_*Hui 2 c# interface

我有这个接口和一个实现它的类:

interface Scraper
{
    string DateToUrl(DateTime date);
}

class ScraperA: Scraper
{
    string Scraper.DateToUrl(DateTime date)
    {
        return "some string based on date";
    }
}
Run Code Online (Sandbox Code Playgroud)

我想测试一下.我尝试将此方法添加到ScraperA:

    public void JustATest()
    {
        DateTime date = new DateTime(2011, 5, 31);
        string url = DateToUrl(date);
        Console.WriteLine(url);
    }
Run Code Online (Sandbox Code Playgroud)

我把它放在类定义中,但编译器抱怨它无法找到DateToUrl.为什么?

Luk*_*keH 5

通过Scraper在声明中为方法名称添加前缀,您将明确地实现接口.

这意味着除非通过Scraper接口调用,否则该方法基本上是不可见的.

你的选择:

  1. 删除Scraper声明中的前缀.然后可以正常调用该方法:

    public string DateToUrl(DateTime date)
    {
        return "some string based on date";
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在调用方法之前将实例强制转换为接口:

    public void JustATest()
    {
        DateTime date = new DateTime(2011, 5, 31);
        string url = ((Scraper)this).DateToUrl(date);
        Console.WriteLine(url);
    }
    
    Run Code Online (Sandbox Code Playgroud)