【发布时间】:2015-03-18 19:08:56
【问题描述】:
我遇到了我最不喜欢的问题,那就是重写代码。这是我目前设计的结构。
public interface ICanMove
{
int speed { get; set; }
void Walk();
void Run();
}
public class Worker : ICanMove
{
speed = 5;
public void Walk()
{
//Example code Move(speed);
}
}
public class Warrior : ICanMove
{
speed = 3;
public void Walk()
{
//Example code Move(speed);
}
}
这里的问题是多个类以相同的方式使用接口。但他们不会总是以同样的方式做事。有没有办法实现这个..更正确。我的另一个选项是一个抽象类,它适用于这个例子,但当我有更多接口时(ICanAttack,ICanBuild)
带抽象类
public abstract class LivingCreature : ICanMove
{
public abstract int speed {get;set;}
public void Walk()
{
//Example code Move(speed);
}
public void Run()
{
}
}
但是我的问题变成了我必须在一个基类上实现多个接口,并不是每个从该基类继承的对象都需要 100%
【问题讨论】:
-
如果您不希望他们以不同的方式实现它,那么您将使用您提到的抽象类。
-
进一步扩展我的评论——界面是您可以做某事的保证,但不能保证您如何做到这一点。抽象类提供通常共享的功能。您可以创建一个实现接口的抽象类,然后从抽象类继承。
-
如果你创建一个抽象类,比如
BaseMover,你可以让抽象类实现ICanMove,然后让Worker和Warrior派生自IBaseMover。问题是您不能进行多重继承,因此拥有 BaseMover 意味着您还可以继承标准化 IcanBuild 接口实现的 BaseBuilder。 -
也许你的
ICanMove没有步行和跑步,而是只有步行和跑步所需的属性(所以这里只是速度)。然后创建一个实现 Walk 和 Run 的移动器类,其中每个方法都接收一个 ICanMove 对象。如果您需要以不同的方式移动,那么您可以创建一个 IMover 界面,然后创建不同的步行/跑步组合
标签: c# .net interface abstract-class