C# 如何强制派生类重写只返回其类名的方法?

C# 如何强制派生类重写只返回其类名的方法?,c#,design-patterns,C#,Design Patterns,我不知道我必须实现什么模式来强制派生类重写只返回其类名的方法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 {

我不知道我必须实现什么模式来强制派生类重写只返回其类名的方法
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);
}

可以对基类使用一些泛型和类型约束。不确定你想要完成什么

    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>
    {
    }
private static void Main(字符串[]args)
{
var实例=新派生的();
Console.WriteLine(instance.Print());
Console.ReadLine();
}
公共抽象类基
TChild:基地在哪里
{
公共字符串Print()=>typeof(TChild).Name;
}
派生的公共类:基
{
}

您可以通过在基类中实现泛型逻辑来实现所需的功能:

protectedstringprint()=>this.GetType().Name;

这样,如果您从
Base
调用该方法,您将始终获得派生类名。

抽象帮助如何强制…?它将强制子类实现成员。更新了回答,但您仍然允许
Derived
返回
“Hello World”
,而不是
nameof(Derived)
。好的,我现在明白您的意思了。您试图实现的是什么问题是您可以执行另一个公共类:Base。
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);
}