小编Ter*_*al8的帖子

.Net中的接口继承/层次结构 - 有更好的方法吗?

我想我会在我的代码中使用一些案例研究作为我的意思的一个例子.

现在,我正在为基于组件的游戏系统开发一个行为/动作系统.GameObjects可以附加一个IBehaviorComponent和一个IActionComponent,只显示相关细节,公开以下内容:

public interface IBehaviorComponent : IBaseComponent
{
   IBehavior Behavior { get; }
}

public interface IActionComponent : IBaseComponent
{
   IAction Action { get; }
   void ExecuteAction(IGameObject target = null);
}
Run Code Online (Sandbox Code Playgroud)

现在,到目前为止这一切都很好(至少对我而言!).但是,当我查看IActionComponent的实现时,麻烦开始酿造.

例如,一个简单的IActionComponent实现:

public class SimpleActionComponent : IActionComponent
{
   public IAction Action { get; protected set; }

   public void ExecuteAction(IGameObject target = null)
   {
      Action.Execute(target);
   }

   public void Update(float deltaTime) { } //from IBaseComponent
}
Run Code Online (Sandbox Code Playgroud)

但是,假设我想引入一个更复杂的IActionComponent实现,它允许在定时计划上执行操作:

public class TimedActionComponent : IActionComponent
{
   public IAction Action { get; protected set; } …
Run Code Online (Sandbox Code Playgroud)

c# inheritance interface

6
推荐指数
1
解决办法
310
查看次数

C#类层次结构中的深层复制/克隆方法 - 我是否需要在任何地方使用具体实现?

假设我有以下类层次结构(包括基本接口):

IAction -> (abstract) BaseAction -> (concrete) ImmediateAction -> (concrete) MovementAction
Run Code Online (Sandbox Code Playgroud)

现在,让我们说IAction公开了一个方法(嗯,实际上是IAction实现的不同接口,但让我们在这里保持简单!):

// Returns a new IAction instance deep copied from the current instance.
IAction DeepClone();
Run Code Online (Sandbox Code Playgroud)

目前很好?我们有深度复制方法,并且ImmediateAction有一些它想要复制的属性,因此它不仅提供实现DeepClone(),还提供复制构造函数:

//Base Action implementation
protected BaseAction(BaseAction old)
{
    this.something = old.something;
}

//Immediate Action Implementation
protected ImmediateAction(ImmediateAction old)
   : base(old)
{
    this.anything = old.anything;
}

public IAction DeepClone()
{
    return new ImmediateAction(this);
}
Run Code Online (Sandbox Code Playgroud)

现在,假设其中MovementAction没有任何与a相关的内容DeepClone(),因此它不实现方法或复制构造函数.

我遇到的问题是:

IAction x = new MovementAction();
IAction y = x.DeepClone();

//pleaseBeTrue is …
Run Code Online (Sandbox Code Playgroud)

c# polymorphism

6
推荐指数
1
解决办法
1429
查看次数

标签 统计

c# ×2

inheritance ×1

interface ×1

polymorphism ×1