类继承,强制新类实现某些功能

2023-12-25

好吧,我正在搞一些事情,特别是接口。

假设我有一个类“猫”,其基础为“动物”动物有一个方法,如下所示

public virtual void Walk()
{
    // Do walking stuff
}

所以 Cat 会用以下内容覆盖它:

public override void Walk()
{
    // Do cat specific walking stuff
}

简单吧?

不过,这是我的问题,有没有办法强制 cat 覆盖基本 Walk() 方法?因此,如果另一个开发人员添加了 Dog 类,他们将被迫实现自己的 Walk 方法(即使它只是 base.Walk())?

所以接口可以解决这个问题,这就是我尝试过的

猫:动物:界面 Animal 必须实现 Walk 方法,但 Cat 不需要

猫:动物,界面 Cat 必须实现 Walk 方法,但如果开发人员没有添加或忘记了“,Interface”,那么它就会“破坏”它。

有人可以给我一些指导来解决这个问题吗?

Thanks.

Edit 1

这就是我的目标,希望它能让我更清楚。

public class Animal
{
    public Animal()
    {
        Console.WriteLine("Animal");
    }

    public virtual void Walk()
    {

    }
}

public class Cat : Animal
{
    public Cat() : base()
    {
        Console.WriteLine("Cat");
    }

    public override void Walk()
    { 

    }
}

class Dog : Animal
{

    public Dog()
    {

    }

    public override void Walk()
    {
        // Dog implementation 
        // and / or calls base method
        base.Walk();
    }
}

这会产生一个错误

class Dog : Animal
{

    public Dog()
    {

    }
}

这是当您想要将基类和基方法标记为abstract.

abstract class Animal 
{
    public abstract void Walk(); 
}

派生类必须实现Walk以便被实例化。

class Cat : Animal 
{
    public override void Walk() { }
}

注意:此更改使Animal其本身不可实例化,对它的所有引用都将通过更多派生类进行。

Animal animal = new Cat();

不过,这是我的问题,有没有办法强制 cat 覆盖 基本 Walk() 方法?因此,如果另一个开发人员添加了 Dog 类,他们 将被迫实现他们自己的 Walk 方法(即使它是 只是base.Walk()) ?

这就是你们之间存在脱节或相反目标的地方。为了强迫孩子们实现一个方法,你可以将它标记为抽象的。为了允许子进程选择使用基本实现,它需要是虚拟的,这样就可以选择重写它。即使您基本上使用模板方法模式并制作parts算法抽象将实现推入较低的类,问题仍然相同:您不能在保留默认实现的同时强制覆盖。*

您需要确定是否想要部分或全部基础实现。


*理论上你可以有abstract void Walk(); protected void WalkImpl() { }在基地,这将允许孩子们选择调用WalkImpl如果他们不想提供自己的实现。

class Cat : Animal
{
     protected override void Walk() { base.WalkImpl(); }
}

不过,我不确定我对此有何感受。通过强制覆盖,同时仍然允许派生类的作者使用默认行为,基本上使派生类的作者的生活变得更加困难。如果可以使用默认行为,只需使用virtual并信任派生类的作者在何时覆盖they感觉很合适。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

类继承,强制新类实现某些功能 的相关文章

随机推荐