接口实现中的公共元素

时间:2011-05-31 15:24:13

标签: c# interface

我有这个界面和一个实现它的类:

interface Scraper
{
    string DateToUrl(DateTime date);
}

class ScraperA: Scraper
{
    string Scraper.DateToUrl(DateTime date)
    {
        return "some string based on date";
    }
}

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

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

我把它放在类定义中,但是编译器抱怨它找不到DateToUrl。为什么呢?

2 个答案:

答案 0 :(得分:5)

通过在implementing the interface explicitly声明中使用Scraper为方法名称添加前缀。

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

您的选择:

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

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

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

答案 1 :(得分:0)

删除“Scraper.DateToUrl”的“Scraper”部分:

interface Scraper
{
    string DateToUrl(DateTime date);
}

class ScraperA: Scraper
{
    string DateToUrl(DateTime date)
    {
        return "some string based on date";
    }
}