c# 继承需要简单的解决方案

8 浏览
0 Comments

c# 继承需要简单的解决方案

希望你能帮我解决这个C#问题。

我有一些类,如下所示:

public abstract class Animal
{
  public abstract void Walk(int param1, int param2);
}
public class Cat : Animal
{
  public override void Walk(int param1, int param2) {}
}
public class SmallCat : Cat
{
  public override void Walk(int param1, int param2) {}
}
public class Dog : Animal
{
  public override void Walk(int param1, int param2) {}
}

我还有一个用于所有动物的控制器类。

someAnimal.Walk(a, b);

我的问题是:我不希望基类了解有关移动的所有细节,但是我需要在Walk函数中为不同的动物提供更多参数或不同的参数。

有什么好的方法来解决这个问题?

顺便说一下,当不同的用户(控制器)控制动物时,才需要更改参数。在阅读了你们的评论后,我决定使用一个简单的UserController类,该类包含所有用户(更改参数)的详细信息,并在控制动物时将其发送到Animal类。

0
0 Comments

问题的原因是需要在调用方法时传入可能会改变的通用参数,如长度和速度,而其他特定于具体实例的参数可以在构造实例时或通过更改器提供给实例。

解决方法是每次想要行走时都需要一个新的实例,这可能很糟糕。但是,也可以通过使用抽象类/接口使Walk接收一个抽象类/接口来实现。

提供一个接口作为Walk方法的参数并不能解决问题,只会将问题传递到调用堆栈的更深层次。唯一能够解决问题的方法是将Map类型作为参数提供给Walk方法,但这种方法会消除在编译时对参数进行错误检查的能力。

以下是解决方法的示例代码:

public interface IWalkable
{
    void Walk(Map map, int length, int velocity);
}
public abstract class Animal : IWalkable
{
    public void Walk(Map map, int length, int velocity)
    {
        // Perform walking logic here
    }
}
public class Dog : Animal
{
    // Dog-specific properties and methods here
}
public class Cat : Animal
{
    // Cat-specific properties and methods here
}

在这个例子中,我们定义了一个IWalkable接口和一个抽象类Animal,Animal实现了IWalkable接口的Walk方法。然后我们定义了Dog和Cat类作为Animal的子类,并可以在这些类中实现特定于每种动物的属性和方法。

使用这种方法,我们可以通过创建不同的Animal实例来控制不同的动物,并通过调用Walk方法并传递所需的参数来使它们行走。

但是需要注意的是,这种方法仍然需要在调用Walk方法时提供参数,因此可能仍然存在一些问题。

0