1

これを行う方法があるかどうかを確認したい... WP7 SDK で vs2010 を使用しています。(VB.NET)

これをグローバルスコープで宣言しています。

public objGame as object

次に、クラスがあるとします:Game1そしてGame2

例のために、両方のクラスに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

リフレクションを使用してクラス オブジェクトの型を取得し、特定のクラスにキャストした後に update メソッドを呼び出すことができます。

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

もう1つの最良のアプローチはInterfaceポリモーフィズムであり、IMHOはそれを実装する正しい方法です..

これをチェックして:

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 に答える