实现接口方法的问题

本文关键字:问题 方法 接口 实现 | 更新日期: 2023-09-27 17:59:27

我在Unity项目中第一次使用接口。我正试图让这个类实现Move()方法。应该很容易,但不起作用。我已经尝试了所有的微软页面和一些类似的问题,但没有发现相同的问题。

using UnityEngine;
using System.Collections;
public interface IMover {
     float Move();
}
public class Move_1 : Mover {
public float moveSpeed = 1;
public float energyConsumption = 0.1;
float Move(Vector2 vec,Rigidbody2D rb){
    rb.AddForce (vec * moveSpeed);
    return energyConsumption * vec.magnitude;
}
}

我确信我错过了一些显而易见的东西。我试过IMover.Move()和之类的东西

public float Mover(

但什么都不起作用。从另一方面来说,我对带有接口的可见性修饰符有点困惑。接口没有可见性修饰符,所以我认为它是实现的一部分。我可能混淆了隐式和显式声明。

实现接口方法的问题

这就是您想要做的吗?

using UnityEngine;
using System.Collections;
public interface IMover {
     float Move();
}
public class Move_1 : IMover {
    private Vector2 vec;
    private Rigidbody2D rb;
    public float moveSpeed = 1;
    public float energyConsumption = 0.1;
    public Move_1(Vector2 vec,Rigidbody2D rb){
        this.vec = vec;
        this.rb = rb;
    }
    float Move(){
        this.rb.AddForce (this.vec * moveSpeed);
        return energyConsumption * vec.magnitude;
    }
}

您的接口定义了一种方法

public interface IMover
{
    float Move();
}

这意味着实现该接口的任何类都必须有一个名为Move的公共方法,该方法不带参数,并且返回float

public class SomeClass : IMover
{
    public float Move()
    {
        // some code
        return someFloat;
    }
}

您的类没有实现接口,尽管这可能是一个拼写错误。

您可以很高兴地在类中创建一个方法重载,但也必须在接口中定义签名,这样以下内容才是有效的

public class SomeClass : IMover
{
    public float Move() { /* implement */ }
    public float Move(float f) { /* implement */ }
}

但是,以下内容(与您的情况类似)无效,因为它没有IMover 接口合同定义的方法

public class SomeClass : IMover
{
    public float Move(float f) { /* implement */ }
}

根据你的评论,你需要做的是这样修改你的界面:

public interface IMover
{
    float Move(Vector2 vec, Rigidbody2D rb);
}

并确保在类中将该方法声明为public。