2015-09-18 3 views
0

Я кодирую игру с кокосом в C# для iOS. Я хочу иметь объект, который будет хранить разные объекты из разных классов, и через этот объект я хочу вызвать общедоступные методы из этих объектов. Проблема в том, что активный объект может быть из трех разных классов с общедоступными методами с тем же именем. Мое видение, как это:Назначить другой объект одному объекту в C#

//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 наследует от класса CCLayer из библиотеки cocossharp.

редактировать 2

This нить решает мою проблему.

+0

Создайте абстрактный базовый класс для своего слоя, а затем создайте три разных конкретных класса, которые наследуются от базового класса. – Jason

ответ

4

Easy, чтобы эти три класса реализации интерфейса:

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# ограничено. Возможно, вам стоит взять книгу.

+0

Спасибо. Да, я начинаю с C#. Я забыл упомянуть, что my_game_object наследуется от класса CCLayer из библиотеки cocosharp. –

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

Сделать верхний уровень интерфейса что Объявляет метод, который является общим для всех рассматриваемых классов. Затем создайте все необходимые классы, реализуя интерфейс и определите метод с той же сигнатурой, что и в интерфейсе в каждом из этих конкретных классов. И не беспокойтесь о правильном методе, который вызывается во время выполнения, полиморфизм отлично справится со своей задачей.

Смежные вопросы