Я не знаю, какой шаблон я должен реализовать, чтобы заставить производный класс переопределить метод Print, возвращающий только его имя класса.
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); }
Вы можете применить то, что вам нужно, реализовав generi c logi c в базовом классе:
protected string Print() => this.GetType().Name;
Таким образом, если вы вызовете метод из Base, вы всегда получите производное имя класса.
Base
Вы можете использовать некоторые базовые типы и ограничения типов в базовом классе. Не уверен, что вы пытаетесь достичь 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> { }