2012-05-04 4 views
1

Я хочу посмотреть, есть ли способ сделать это ... Я использую vs2010 с WP7 SDK. (VB.NET)VB.NET Вызов функций класса после объявления как объекта

Я объявляю это в глобальном масштабе.

public objGame as object

тогда у меня есть классы: Game1 и Game2

ради примера мы будем просто говорить оба класса имеют Update() функцию

Я хочу, чтобы установить objGame = Game1 (или Game2)

а затем можно позвонить по телефону objGame.Update()

есть ли способ сделать это?

ответ

3

Объявить интерфейс IGame с помощью метода Update(). Наследуйте и Game1, и Game2 от него.

IGame objGame= Game1() [or Game2] 

objGame.Update() 

Вот вики link на полиморфизм в объектно-ориентированного программирования.

+0

+1 для правильной информации и suggestion..but ора несколько относительно экстрагента ссылочного типа назначенного объекта класса ... –

-1

Сначала объявить публичный объект или как Game1 или Game2

Public objGame As New Game1 

Тогда все, что вы делаете с объектом, фактически представляющие собой либо game1 или Game2

objGame.Update() 
1

Вы можете использовать отражение для получения типа объекта класса, а затем вызывать метод обновления после того, как он задал конкретный класс.

фрагмент кода в C#, возможно, вы поймете, что делать. Здесь object в классе Shared и установите объект в свой класс Game1 или Game2. то доступ, а затем использование небольшого отражения для работы с объектом - это время выполнения.

public static class GameCommon 
    { 
     public static object currentGame; 
    } 

/// Использование .GetType()

GameCommon.currentGame = new Game1(); 

      if (GameCommon.currentGame != null) 
      { 
       Type type = GameCommon.currentGame.GetType(); 
       if (type.Name == "Game1") 
       { 
        ((Game1)GameCommon.currentGame).Update();  
       } 
       else if (type.Name == "Game2") 
       { 
        ((Game2)GameCommon.currentGame).Update();  
       } 
      }` 

Другое лучший подход это Interface полиморфизм и ИМХО это правильный способ реализации ..

Проверьте это:

public static class GameCommon 
    { 
     public static IGame currentGame; 
    } 

    public interface IGame 
    { 
     void Update(); 
    } 
    public class Game1 : IGame 
    { 
     public void Update() 
     { 
      Console.WriteLine("Running:Game1 Updated"); 
     } 
    } 

    public class Game2 : IGame 
    { 
     public void Update() 
     { 
      Console.WriteLine("Running:Game2 Updated"); 
     } 
    }` 

Назовите его как:

GameCommon.currentGame = new Game1(); 

      if (GameCommon.currentGame != null) 
      { 
       GameCommon.currentGame.Update(); 
      } 

      GameCommon.currentGame = new Game2(); 
      GameCommon.currentGame.Update(); 
      Console.ReadKey();` 

Надеется, что это поможет вам ..

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