【问题标题】:Assign different object to a one object in C#在 C# 中将不同的对象分配给一个对象
【发布时间】:2015-12-15 15:20:21
【问题描述】:

我正在用 C# 为 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 线程解决了我的问题。

【问题讨论】:

  • 为你的层创建一个抽象基类,然后拥有三个不同的从基类继承的具体类。

标签: c# ios object xamarin cocossharp


【解决方案1】:

创建一个顶级接口,声明这里所有相关类都通用的方法。然后通过实现接口创建您需要的所有类,并在每个具体类中使用与接口中相同的签名定义方法。并且不要担心在运行时调用正确的方法,多态会完美地完成它的工作。

【讨论】:

    【解决方案2】:

    定义一个接口,并将其添加为三个类中的每一个的接口:

    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();
    

    【讨论】:

      【解决方案3】:

      简单,让这三个类实现一个接口:

      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# 的基本知识有限。也许你应该拿一本书。

      【讨论】:

      • 谢谢。是的,我从 C# 开始。我忘了说 my_game_object 继承自 cocosharp 库的 CCLayer 类。
      猜你喜欢
      • 2017-01-25
      • 2021-01-05
      • 1970-01-01
      • 1970-01-01
      • 2020-11-10
      • 1970-01-01
      • 1970-01-01
      • 2018-01-04
      • 1970-01-01
      相关资源
      最近更新 更多