Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 接收泛型类作为参数_C#_Unity3d_Generics - Fatal编程技术网

C# 接收泛型类作为参数

C# 接收泛型类作为参数,c#,unity3d,generics,C#,Unity3d,Generics,我是普通班的新手。我现在正在做游戏。我会有很多敌人,它们都是从泛型Enemy基类继承的 public abstract class EnemyBase<TState, TTransition> { protected StateMachine<TState, TTransition> m_FSM; } 这将起作用,但攻击方法是在另一个方法中调用的,因此此另一个方法也必须实现,并且此另一个方法由另一个方法调用。。。然后继续 我希望实现以下目标: public v

我是普通班的新手。我现在正在做游戏。我会有很多敌人,它们都是从泛型Enemy基类继承的

public abstract class EnemyBase<TState, TTransition>
{
     protected StateMachine<TState, TTransition> m_FSM;
}
这将起作用,但攻击方法是在另一个方法中调用的,因此此另一个方法也必须实现
,并且此另一个方法由另一个方法调用。。。然后继续

我希望实现以下目标:

public void Attack()
{
     EnemyBase enemy = GetComponent<EnemyBase>();
}
公共无效攻击()
{
EnemyBase敌人=GetComponent();
}

公共无效攻击()
{
EnemyBase敌人=GetComponent();
}
我不知道这些sintaxes是否正确,甚至不知道它们是否存在,但我只想知道这个类是否是EnemyBase,而不管它的泛型如何

谢谢


编辑:添加了用于的泛型类型

您不能有一个字段具有未绑定的泛型类型,如
EnemyBase

您需要为通用类定义一个非通用基类,如
EnemyBase:EnemyBase
,或者定义一个接口,如
EnemyBase:IEnemy


然后您可以有一个
EnemyBase
IEnemy
字段。

您需要执行以下操作:

public class EnemySquire : EnemyBase<EnemySquire.State, EnemySquire.StateTransition>
{
    public enum State
    {
        IDLE,
        WALK,
        ATTACKED,
        DEAD,
    }

    public enum StateTransition
    {
        FOUND_FREE_GRID,
        FINISHED,
        FREED,
        OUT_OF_LIFE,
        ATTACKED,
    }
}
public interface IEnemy
{
     StateMachine m_FSM { get ; }
}

public abstract class EnemyBase<TState, TTransition> : IEnemy
{

    protected StateMachine<TState, TTransition> m_FSM;
    StateMachine IEnemy.m_FSM => this.m_FSM;
}

public class StateMachine
{

}

public class StateMachine<TState, TTransition> : StateMachine
{

}
公共接口IEnemy
{
状态机m_FSM{get;}
}
公共抽象类EnemyBase:IEnemy
{
受保护状态机m_FSM;
StateMachine IEnemy.m_FSM=>this.m_FSM;
}
公共类状态机
{
}
公共类状态机:状态机
{
}

定义公共接口,并且仅在实现端进行泛型,以公开这些接口。避免不必要的继承(紧密耦合)。在这种情况下,它必须是泛型的,因为EnemyBase有一个FSM,并且FSM接收这些泛型类型:
protectedstatemachine m\u FSM我用main方法实现了一个接口,这样我就可以从另一个类中获取。我想我可以声明一个未绑定的泛型类型。这会容易得多,但界面做到了。谢谢
public void Attack()
{
     EnemyBase<,> enemy = GetComponent<EnemyBase<,>>();
}
public interface IEnemy
{
     StateMachine m_FSM { get ; }
}

public abstract class EnemyBase<TState, TTransition> : IEnemy
{

    protected StateMachine<TState, TTransition> m_FSM;
    StateMachine IEnemy.m_FSM => this.m_FSM;
}

public class StateMachine
{

}

public class StateMachine<TState, TTransition> : StateMachine
{

}