1

我想看看是否有办法做到这一点......我正在使用带有 WP7 SDK 的 vs2010。(VB.NET)

我在全球范围内宣布这一点。

public objGame as object

然后说我有课:Game1Game2

为了这个例子,我们只说两个类都有一个Update()函数

我想设置objGame = Game1 (或 Game2)

然后就可以打电话了objGame.Update()

有没有办法做到这一点?

4

3 回答 3

3

使用方法 Update() 声明一个接口 IGame。从它继承 Game1 和 Game2。

IGame objGame= Game1() [or Game2]

objGame.Update()

这是关于 OOP 中多态性的 wiki链接

于 2012-05-04T05:39:05.293 回答
1

您可以使用反射来获取类对象的类型,然后在将其转换为特定类后调用更新方法。

C# 中的代码片段,可能你会明白该怎么做。在 Shared 类中object,将对象设置为您的类 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();`

希望这对你有帮助..

于 2012-05-04T06:29:12.913 回答
-1

首先将您的公共对象声明为 Game1 或 Game2

Public objGame As New Game1

然后,无论您对对象做什么,实际上都代表 Game1 或 Game2

objGame.Update()
于 2012-05-04T05:54:23.763 回答