C# 8 Вызовите реализацию по умолчанию из конкретного типа - PullRequest
3 голосов
/ 03 февраля 2020

Учитывая следующее interface с реализацией по умолчанию:

public interface IState
{
    string Name => "Unknown";
}

И конкретную реализацию следующим образом:

public class Demo: IState
{
    public void PrintName()
   { 
       Console.WriteLine(this.Name); // <-- this is invalid syntax
   }
}

Можно ли вызвать реализацию по умолчанию изнутри конкретный тип?

Я просмотрел документацию для реализаций по умолчанию для C# 8.0 и, если ответ есть, я не могу его найти.

1 Ответ

6 голосов
/ 03 февраля 2020

Вы можете использовать его, приведя this к интерфейсу, и вызвать свойство в результате приведения. Это как если бы класс реализовал свойство, используя явную реализацию интерфейса. Вот полный пример, который печатает «Неизвестно»:

using System;

public interface IState
{
    string Name => "Unknown";
}

public class Demo : IState
{
    public void PrintName()
    {
        Console.WriteLine(((IState) this).Name);
    }
}

class Program
{
    static void Main()
    {
        new Demo().PrintName();
    }
}
...