我正在使用C#for iOS的cocosharp编写游戏。我想要一个对象来存储来自不同类的不同对象,并且通过这个对象,我希望从这个对象中调用公共方法。问题是活动对象可以来自三个不同的类,其公共方法具有相同的名称。我的愿景是这样的:
//object for store active object
General_class active_object = new General_class();
//my_game_object is active layer now
active_object = my_game_object;
// pop_in() is method that has same name in different classes
active_object.pop_in();
我的问题是,即使这样的事情是可能的,也应该是General_class类。
谢谢
修改的
我忘了提到my_game_object从cocossharp库继承了CCLayer类。
编辑2
This线程解决了我的问题。
答案 0 :(得分:4)
很简单,让这三个类实现一个接口:
public interface ILayer
{
void pop_in();
}
// one of your classes
public class SomeLayer : ILayer
{
// ...
}
//object for store active layer
ILayer active_layer = new SomeLayer();
// rest of the code works
虽然我怀疑这可能意味着你对C#的基本知识有限。也许你应该拿一本书。
答案 1 :(得分:0)
定义一个接口,并将其作为接口添加到您的三个类中:
public interface ILayer
{
void pop_in();
}
public GameLayer : ILayer
{
public void pop_in()
{
// GameLayer-specific implementation
}
}
然后您的代码变为:
//object for store active layer
ILayer active_layer = // Whatever your default active layer is
//my_game_layer is active layer now
active_layer = my_game_layer;
// pop_in() is method that has same name in different classes
active_layer.pop_in();
答案 2 :(得分:0)
创建一个顶级接口,声明此处所有类中常见的方法。然后通过实现接口创建所需的所有类,并使用与每个具体类中的接口相同的签名定义方法。并且不用担心在运行时调用正确的方法,多态将完美地完成它的工作。