需要帮助来了解我的C#控制台应用程序中的动态菜单

内森

我正在尝试设计一个控制台应用程序,其中的菜单是通过某种数据结构生成的,并且每个菜单项都可以指定一个处理程序/操作(可能只是显示一个不同的菜单)。抱歉,这听起来已经很令人费解了!

我在寻找解决此问题的正确方法时遇到了很多麻烦。这是我的第一个C#应用程序,感觉好像我已经读了几个小时的委托书了,但我什至不确定我是否应该使用它们。

我有很多现有的代码,但是我觉得如果在尝试修复基础方面可能遇到的问题之前获得一些总体指导可能会更好。我将尝试描述我要做什么:

  • 具有由菜单标题和任意数量的菜单项组成的“菜单”类。
  • 每个“ MenuItem”由一个热键,描述和“指向处理程序的指针”组成。
  • 处理程序完成工作并返回菜单。

这是我遇到的“指向处理程序的指针”。此处理程序应如何在MenuItem对象中表示?如何从菜单提示中调用处理程序?我会以完全错误的方式进行操作吗?

希望这是有道理的:)

皮特·沃科夫斯基(Piotr Wolkowski)

我认为代表们可能是一个很好的起点。首先,由于它们在C#中相当流行,并且由于您开始学习C#,因此这是一个很好的做法。其次,使用委托来实现您的应用程序应该非常简单。

让我们考虑一下Action<T>Func<T>代表。第一个可以执行某些操作,但不会返回任何值。第二个返回一个类型T的值。这两种类型最多可以包含16个参数。基本上,它们的主要行为是成为方法的占位符。

因此,让我们看一下嵌入在您的应用程序上下文中的一些示例:

public class MenuItem<T>
{
    public string Description { get; set; }
    public char HotKey { get; set; }
    public Func<T> FirstHandler { get; set; }       // returns some value
    public Action<T> SecondHandler { get; set; }    // does not return any value

    // let's use this method to invoke the first handler
    public T DoSomething()
    {
        // this handler is of type Func<T> so it will return a value of type T
        return this.FirstHandler.Invoke();
    }

    // let's use this method to invoke the second handler
    public void DoSomethingElse(T input)
    {
        this.SecondHandler.Invoke(input);
    }
}

在的情况下,Func如果有比上一个以上的说法是返回类型。其他是输入类型。因此,例如,Func<int, char, string>将接受采用intchar作为输入但返回的方法string您可以从Visual Studio中获得一些帮助-它在委托描述中显示,inout在参数前面显示单词以表示它是输入参数还是输出参数。

现在,有了MenuItem创建类,您可以通过以下方式使用它:

class Program
{
    // A method that takes no input arguments but returns string
    private static string ReturnHelloWorld()
    {
        return "Hello World";
    }

    static void Main(string[] args)
    {
        MenuItem<string> menuItem = new MenuItem<string>();

        // FirstHandler signature is Func<T>
        // So it doesn't take any input arguments
        // and returns T - in our case string
        menuItem.FirstHandler = ReturnHelloWorld;

        // SecondHandler signature is Action<T>
        // So it takes one input argument of type T (here, string)
        // and returns void
        menuItem.SecondHandler = Console.WriteLine;

        // Now use a method of MenuItem class to invoke FirstHandler.
        string menuItemMessage = menuItem.DoSomething();
        // Use another method to invoke SecondHandler.
        menuItem.DoSomethingElse(menuItemMessage);
    }
}

请注意,这只是您问题的一个非常基本的起点。但是,它允许您创建菜单项并为这些项分配不同的行为。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

需要帮助来了解我程序中的构造函数(C ++)

来自分类Dev

在控制台应用程序中实现导航菜单

来自分类Dev

如何从C#中的控制台应用程序运行Web应用程序

来自分类Dev

安排C#控制台应用程序

来自分类Dev

Gmail控制台应用程序C#

来自分类Dev

使C#控制台应用程序与wpf交互

来自分类Dev

随机统计应用程序?(控制台C#)

来自分类Dev

河内C#塔控制台应用程序。

来自分类Dev

C#控制台应用程序即服务

来自分类Dev

控制台应用程序 c# 舍入

来自分类Dev

VS 2017 控制台应用程序 (C#)

来自分类Dev

需要帮助来创建第一个 C++ 控制台应用程序

来自分类Dev

从其他C#控制台应用程序运行C#控制台应用程序

来自分类Dev

C# 控制台应用程序在我运行后自行关闭

来自分类Dev

我可以在 C# 控制台应用程序中使用 Unicode 吗?

来自分类Dev

如果用户在C#程序中打印“ x”,如何使控制台应用程序退出?

来自分类Dev

如何在C#中的控制台应用程序中激活代码的不同部分

来自分类Dev

在 C# 控制台应用程序中检查的 Delphi 应用程序中打开的互斥锁

来自分类Dev

C#很小的控制台应用程序(Visual Studio 2012)中的默认线程

来自分类Dev

C#控制台应用程序中剪贴板的奇怪行为

来自分类Dev

强制控制台应用程序即使在C#中处于繁忙状态也要打印

来自分类Dev

在C#控制台应用程序中添加“ --help”参数

来自分类Dev

输出屏幕在C#控制台应用程序中突然消失?

来自分类Dev

C#控制台应用程序中的多个全局热键

来自分类Dev

在C#的控制台应用程序中验证字符串仅包含字母

来自分类Dev

如何从C#控制台应用程序写入Azure WebJobs中的日志?

来自分类Dev

如何使用C#在内存中执行.NET控制台应用程序?

来自分类Dev

C#线程:新线程中的控制台应用程序不可见

来自分类Dev

在C#控制台应用程序app.config中嵌入Webclient的凭据?

Related 相关文章

  1. 1

    需要帮助来了解我程序中的构造函数(C ++)

  2. 2

    在控制台应用程序中实现导航菜单

  3. 3

    如何从C#中的控制台应用程序运行Web应用程序

  4. 4

    安排C#控制台应用程序

  5. 5

    Gmail控制台应用程序C#

  6. 6

    使C#控制台应用程序与wpf交互

  7. 7

    随机统计应用程序?(控制台C#)

  8. 8

    河内C#塔控制台应用程序。

  9. 9

    C#控制台应用程序即服务

  10. 10

    控制台应用程序 c# 舍入

  11. 11

    VS 2017 控制台应用程序 (C#)

  12. 12

    需要帮助来创建第一个 C++ 控制台应用程序

  13. 13

    从其他C#控制台应用程序运行C#控制台应用程序

  14. 14

    C# 控制台应用程序在我运行后自行关闭

  15. 15

    我可以在 C# 控制台应用程序中使用 Unicode 吗?

  16. 16

    如果用户在C#程序中打印“ x”,如何使控制台应用程序退出?

  17. 17

    如何在C#中的控制台应用程序中激活代码的不同部分

  18. 18

    在 C# 控制台应用程序中检查的 Delphi 应用程序中打开的互斥锁

  19. 19

    C#很小的控制台应用程序(Visual Studio 2012)中的默认线程

  20. 20

    C#控制台应用程序中剪贴板的奇怪行为

  21. 21

    强制控制台应用程序即使在C#中处于繁忙状态也要打印

  22. 22

    在C#控制台应用程序中添加“ --help”参数

  23. 23

    输出屏幕在C#控制台应用程序中突然消失?

  24. 24

    C#控制台应用程序中的多个全局热键

  25. 25

    在C#的控制台应用程序中验证字符串仅包含字母

  26. 26

    如何从C#控制台应用程序写入Azure WebJobs中的日志?

  27. 27

    如何使用C#在内存中执行.NET控制台应用程序?

  28. 28

    C#线程:新线程中的控制台应用程序不可见

  29. 29

    在C#控制台应用程序app.config中嵌入Webclient的凭据?

热门标签

归档