Как заставить производный класс переопределить метод, который возвращает только имя своего класса? - PullRequest
2 голосов
/ 11 апреля 2020

Я не знаю, какой шаблон я должен реализовать, чтобы заставить производный класс переопределить метод Print, возвращающий только его имя класса.

class Base
{
    protected virtual string Print() => nameof(Base);

    static void Main(string[] args)
    {
        Base b = new Derived();
        Console.WriteLine(b.Print());
    }
}

class Derived : Base
{
    protected override string Print() => nameof(Derived);
}

Ответы [ 2 ]

2 голосов
/ 11 апреля 2020

Вы можете применить то, что вам нужно, реализовав generi c logi c в базовом классе:

protected string Print() => this.GetType().Name;

Таким образом, если вы вызовете метод из Base, вы всегда получите производное имя класса.

0 голосов
/ 11 апреля 2020

Вы можете использовать некоторые базовые типы и ограничения типов в базовом классе. Не уверен, что вы пытаетесь достичь sh.

    private static void Main(string[] args)
    {
        var instance = new Derived();
        Console.WriteLine(instance.Print());
        Console.ReadLine();
    }

    public abstract class Base<TChild>
        where TChild : Base<TChild>
    {
        public string Print() => typeof(TChild).Name;
    }

    public class Derived : Base<Derived>
    {
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...