【发布时间】:2016-09-12 11:24:07
【问题描述】:
大家好,我在 Unity3d 中使用 C# 进行编程,在编写代码时遇到了一个小问题,我给你写了一个例子,因为我不知道解释一下。
class Base
{
public string name;
}
class Derived : Base
{
public void Gun();
}
class BasePlayer
{
public Base x;
}
class SoldierPlayer : BasePlayer
{
}
情况是这样的,我想做那样的事情
SoldierPlayer.x.Gun();
但我不知道该怎么做
真实情况是这样的
public class BasePlayerController : MonoBehaviour
{
public BasePlayerManager playerManager;
...
public class RobotPlayerController : BasePlayerController {
...
playerManager = gameObject.AddComponent<RobotPlayerManager>();
我会使用新方法
更新 1
我做了一个更好的例子,我想在 Base Controller manager.user.energy 中做并被视为下一个类型 RobotManager.RobotUser.energy
BaseController
BaseManager
BaseUser
class BaseController
{
BaseManager manager;
public virtual void Move(int x,int y)...
}
class BaseManager {
BaseUser user;
public virtual Pause(bool state);
}
class BaseUser {
int life
}
RobotController
RobotManager
RobotUser
class RobotController : BaseController
{
// manager as RobotManager?
public void Ray(int x,int y);
}
class RobotManager : BaseManager
{
// user as RobotUser?
}
class RobotUser : BaseUser
{
int energy;
}
更新 2 我想这样做
public Run()
{
RobotController rc = new RobotController();
rc.manager.energy;
}
【问题讨论】:
-
你为什么不从
Base继承你的SoldierPlayer?如果你想这样做,在你的BasePlayer中应该有一个像public Derived x;这样的字段。我强烈建议你看看Polymorphismus。 -
您正在寻找抽象类和方法以及虚拟方法。先谷歌一下。
-
不应该只是
x的类型为Derived? -
Base 和 Derived 是其他类,我知道使用虚拟方法,但这种情况我提出我不知道,@Sinatr 我不能,因为我是从核心类继承的。
-
@ChristophKn 有一条评论,他的评论实际上是您问题的答案。
public Base x;应该是public Derived x;
标签: c# inheritance unity3d polymorphism