修改访问修饰符

3
我一直在使用C#进行编码,但遇到了一些问题。我一直在关注这个YouTube教程,但是出现了一些错误。在Walking状态代码中的第七行,它说:

Error CS0507 'WalkingState.ProcessMotion(Vector3)': cannot change access modifiers when overriding 'public' inherited member 'BaseState.ProcessMotion(Vector3)'

这是什么意思,我该如何解决?

基础状态代码:

using UnityEngine;
using System.Collections;

public abstract class BaseState : MonoBehaviour
{
    protected BaseMotor motor;

    #region baseState implementation
    public virtual void Construct()
    {
        motor = GetComponent<BaseMotor>();
    }
    public virtual void Destruct ()
    {
        Destroy(this);
    }
    public virtual void Transition ()
    {

    }
    #endregion

    public abstract Vector3 ProcessMotion(Vector3 input);
    public virtual Quaternion ProcessRotation(Vector3 input)
    {
        return transform.rotation;
    }
}

运行状态代码:

using UnityEngine;
using System.Collections;

public class WalkingState : BaseState
{
    protected override Vector3 ProcessMotion(Vector3 input)
    {
        return input * motor.Speed;
    }
}

3
当从基类使用public时,不能使用protected。 - mugabits
2个回答

9

ProcessMotion在基类中声明为public。你还需要在派生类中将其声明为public

改为:

protected override Vector3 ProcessMotion(Vector3 input)

做:

public override Vector3 ProcessMotion(Vector3 input)

3
错误信息非常清楚:基类将该方法标记为public,但您试图在派生类中将其更改为protected。这是不允许的,它在派生类中也必须是public的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接