我想使用由另一个类实现的接口来调用函数,而不用在 C# 中创建该类的实例

我想使用接口方法调用所有函数,但我不想创建实现接口的类的实例。我过去做过一些我做过的项目,ISomeInterface proxy = ChannelFactory<SomeImplementation>().CreateChannel()然后使用了诸如proxy.Method(). 我想做这样的事情,ChannleFactory如果可能的话可能没有,我想知道是否有可能。

private static IUserInterface proxy;
        [STAThread]
        static void Main(string[] args)
        {
            bool closeApp = false;

            do
            {
                proxy.PrintMenu();

                int command;
                Int32.TryParse(Console.ReadKey().KeyChar.ToString(), out command);
                Console.WriteLine();
                closeApp = proxy.SendMenuCommand(command);
            } while (!closeApp);

            // Aplikacija ugasena
            Console.WriteLine("Application closed successfully. Press any key...");
            Console.ReadKey();
        }

弹出的错误是代理没有设置为对象的实例。

杰伦·范·兰根

接口只是一个契约,与实例无关。如果一个类实现了该接口,您可以将一个实例类型转换为该接口并调用该接口中定义的方法/属性.. (它甚至不是代理)

该接口不包含任何实现。这只是一个类必须实现以遵守契约的一组协议。

所以你必须有一个实例。

在您的示例中:proxy.PrintMenu();谁实施了PrintMenu()

我可能是这样的:

界面:

// This is the contract. (as you can see, no implementation)
public interface IUserInterface
{
    void PrintMenu();
    bool SendMenuCommand(int command);
}

第一个实现:

// The class implements that interface, which it MUST implements the methods.
// defined in the interface.  (except abstract classes)
public class MyUserInterface : IUserInterface
{
    public void PrintMenu()
    {
        Console.WriteLine("1 - Option one");
        Console.WriteLine("2 - Option two");
        Console.WriteLine("3 - Option three");
    }

    public bool SendMenuCommand(int command)
    {
        // do something.
        return false;
    }
}

其他实现:

// same for this class.
public class MyOtherUserInterface : IUserInterface
{
    public void PrintMenu()
    {
        Console.WriteLine("1) Submenu 1");
        Console.WriteLine("2) Submenu 2");
        Console.WriteLine("3) Submenu 3");
    }

    public bool SendMenuCommand(int command)
    {
        // do something.
        return true;
    }
}

你的主要:

private static IUserInterface menu;

[STAThread]
static void Main(string[] args)
{
    bool closeApp = false;

    // because the both classes implements the IUserInterface interface,
    // the both can be typecast to IUserInterface 
    IUserInterface menu = new MyUserInterface();

    // OR
    //IUserInterface menu = new MyOtherUserInterface();

    do
    {
        proxy.PrintMenu();

        int command;
        Int32.TryParse(Console.ReadKey().KeyChar.ToString(), out command);
        Console.WriteLine();
        closeApp = proxy.SendMenuCommand(command);
    } while (!closeApp);

    // Aplikacija ugasena
    Console.WriteLine("Application closed successfully. Press any key...");
    Console.ReadKey();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在另一个类中创建该类的实例

来自分类Dev

另一个类的c ++私有对象:初始化并使用它调用该类中的函数

来自分类Dev

我如何创建一个接收类的接口,而不是在Typescript中接收该类的实例的接口

来自分类Dev

创建一个 C++ 类并在另一个包含 ndk android 中的 JNI 方法的 C++ 类中使用该类

来自分类Dev

C#如何在一个函数中创建类的实例,然后在另一个函数中使用相同的实例

来自分类Dev

如何调用在另一个类中声明的方法(C ++)

来自分类Dev

我可以从 C# 中另一个类的构造函数调用构造函数吗?

来自分类Dev

在该类中创建一个类的实例是标准做法吗?

来自分类Dev

同一类的另一个构造函数中的c ++调用构造函数

来自分类Dev

如何创建一个C ++宏来定义使用调用另一个函数的参数列表的函数?

来自分类Dev

从C ++中的类模板中的函数调用另一个成员函数

来自分类Dev

在类中声明属性,该类在C ++中具有另一个类型

来自分类Dev

通过C#调用C ++ DLL的导出类时,该类的C样式字符串成员在一个导出函数中可以,但在另一个导出函数中则可以

来自分类Dev

C# 读取字符串中的类树路径并访问给定该类实例的值

来自分类Dev

我如何从C ++中的静态线程入口点函数调用另一个函数?

来自分类Dev

在 C# 中从另一个类调用主窗体中的函数

来自分类Dev

如何从C#中的另一个类调用函数

来自分类Dev

在另一个类中调用成员函数c ++

来自分类Dev

C ++从文件阅读器中的另一个类调用集合函数

来自分类Dev

在另一个类中调用成员函数c ++

来自分类Dev

从 C#/.NET MVC 应用程序中的另一个类调用函数

来自分类Dev

您可以在类中创建帮助程序函数而无需实例化该类的对象吗?

来自分类Dev

我可以在C ++中创建一个匿名的即时类(接口的实现)吗

来自分类Dev

如何使用另一个类(C#)中的变量实现搜索功能?

来自分类Dev

如何使用属于该类类型并使用另一个类调用的变量来调用在类下定义的变量?

来自分类Dev

另一个使用引用和参数的函数中的C ++调用函数

来自分类Dev

在C ++中创建类的实例的向量

来自分类Dev

如何使用继承从C#中的另一个类进行调用和对象

来自分类Dev

目标C:身份检查器中的自定义类创建该类的新对象?

Related 相关文章

  1. 1

    在另一个类中创建该类的实例

  2. 2

    另一个类的c ++私有对象:初始化并使用它调用该类中的函数

  3. 3

    我如何创建一个接收类的接口,而不是在Typescript中接收该类的实例的接口

  4. 4

    创建一个 C++ 类并在另一个包含 ndk android 中的 JNI 方法的 C++ 类中使用该类

  5. 5

    C#如何在一个函数中创建类的实例,然后在另一个函数中使用相同的实例

  6. 6

    如何调用在另一个类中声明的方法(C ++)

  7. 7

    我可以从 C# 中另一个类的构造函数调用构造函数吗?

  8. 8

    在该类中创建一个类的实例是标准做法吗?

  9. 9

    同一类的另一个构造函数中的c ++调用构造函数

  10. 10

    如何创建一个C ++宏来定义使用调用另一个函数的参数列表的函数?

  11. 11

    从C ++中的类模板中的函数调用另一个成员函数

  12. 12

    在类中声明属性,该类在C ++中具有另一个类型

  13. 13

    通过C#调用C ++ DLL的导出类时,该类的C样式字符串成员在一个导出函数中可以,但在另一个导出函数中则可以

  14. 14

    C# 读取字符串中的类树路径并访问给定该类实例的值

  15. 15

    我如何从C ++中的静态线程入口点函数调用另一个函数?

  16. 16

    在 C# 中从另一个类调用主窗体中的函数

  17. 17

    如何从C#中的另一个类调用函数

  18. 18

    在另一个类中调用成员函数c ++

  19. 19

    C ++从文件阅读器中的另一个类调用集合函数

  20. 20

    在另一个类中调用成员函数c ++

  21. 21

    从 C#/.NET MVC 应用程序中的另一个类调用函数

  22. 22

    您可以在类中创建帮助程序函数而无需实例化该类的对象吗?

  23. 23

    我可以在C ++中创建一个匿名的即时类(接口的实现)吗

  24. 24

    如何使用另一个类(C#)中的变量实现搜索功能?

  25. 25

    如何使用属于该类类型并使用另一个类调用的变量来调用在类下定义的变量?

  26. 26

    另一个使用引用和参数的函数中的C ++调用函数

  27. 27

    在C ++中创建类的实例的向量

  28. 28

    如何使用继承从C#中的另一个类进行调用和对象

  29. 29

    目标C:身份检查器中的自定义类创建该类的新对象?

热门标签

归档