实现接口方法的问题
本文关键字:问题 方法 接口 实现 | 更新日期: 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。