【问题标题】:VB.NET Calling class functions after declared as an Object声明为对象后的VB.NET调用类函数
【发布时间】:2012-05-04 05:28:40
【问题描述】:

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

我在全局范围内声明。

public objGame as object

然后说我有课:Game1Game2

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

我想设置objGame = Game1(或Game2)

然后就可以拨打objGame.Update()

有没有办法做到这一点?

【问题讨论】:

    标签: vb.net class generics object


    【解决方案1】:

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

    IGame objGame= Game1() [or Game2]
    
    objGame.Update()
    

    这是关于 OOP 中的多态性的 wiki link

    【讨论】:

    • +1 获取正确的信息和建议..但是操作有点关于提取分配的类对象的引用类型...
    【解决方案2】:

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

    C# 中的代码 sn-p,也许你会明白该怎么做。这里 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();`
    

    希望对你有所帮助..

    【讨论】:

      【解决方案3】:

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

      Public objGame As New Game1
      

      那么你对对象所做的任何事情实际上都代表 Game1 或 Game2

      objGame.Update()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-30
        • 1970-01-01
        • 2021-06-10
        • 2011-11-02
        相关资源
        最近更新 更多