Открытые элементы в реализации интерфейса - PullRequest
2 голосов
/ 31 мая 2011

У меня есть этот интерфейс и класс, реализующий его:

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 ]

5 голосов
/ 31 мая 2011

Префикс имени метода в объявлении Scraper означает, что вы явно реализуете интерфейс .

Это означает, что метод практически невидим, если он не вызывается через * 1006.* interface.

Ваши параметры:

  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);
    }
    
0 голосов
/ 31 мая 2011

Удалите часть «Scraper» из «Scraper.DateToUrl»:

interface Scraper
{
    string DateToUrl(DateTime date);
}

class ScraperA: Scraper
{
    string DateToUrl(DateTime date)
    {
        return "some string based on date";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...