C#实用工具类 - 设置一般使用和编译没有主要

时间:2016-06-10 23:08:12

标签: c# utility-method

好的,所以努力学习一些C#。伟大的语言,喜欢与它一起工作,但我不理解如何克服缺乏实用程序类。本质上,我想设置一个通用实用程序类,它可以包含在一个文件夹中,只需通过“使用命名空间Globals / Utilities / etc”就可以用于任何项目。命令。实质上:

using System;
namespace Globals {
    public static class Commands {
        public static void WaitForReturn() {
            Console.WriteLine("Press Enter to continue.");
            Console.ReadLine();
        }
    }
}

与上述类似,在任何其他类中,我可以通过将其包含为预处理指令来调用函数。

using System;
using Globals;

namespace RectangleDemo {
    <rectangle definition here>

    class Demo {
        static void Main(string[] args) {
            Rectangle r = new Rectangle();
            Rectangle s = new Rectangle(5, 6);
            r.Display();
            s.Display();
            WaitForReturn();
        }
    }
}

实际上,我正在尝试简单地编译我的'实用程序'类(超过上面列出的内容)来检查错误,但它只是告诉我它无法编译它因为没有主要方法。有什么建议吗?

(是的,我知道我有一个java编码风格,我没关系!)

2 个答案:

答案 0 :(得分:5)

使用C#6,您可以导入静态方法,以便最终得到以下编码样式:

using System;
using static Globals.Commands;

namespace MyConsole
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            WaitForReturn();
        }
    }
}

namespace Globals
{
    public static class Commands
    {
        public static void WaitForReturn()
        {
            Console.WriteLine("Press Enter to continue.");
            Console.ReadLine();
        }
    }
}

根据Tim的建议,如果您不想要主要入口点,请使用类库项目而不是控制台应用程序。

答案 1 :(得分:0)

C#无法按照您的预期运作。导入名称空间/类和文件之间没有关系,因此执行using Globals;不会转换为包含C / C ++的文件内容(即与#include "Globals.cs"不同)。

在命令行中,C#编译器接受组成源的文件列表:

csc Demo.cs Globals.cs

如果您使用的是像Visual Studio这样的IDE,则将<{em} Globals.cs链接到您的项目中。通过 link ,我的意思更像是一个符号链接(虽然它实际上不是实际),而不是通过链接器进行静态链接,就像在C / C ++设置中一样。

因此,为了使“包含公共代码”的方案有效,您需要通过简单地将Globals.cs添加到组成项目的C#文件列表中进行编译(在命令行中提供给编译器或添加到IDE中的项目中,然后使用静态导入

using System;
using static Globals.Commands; // <-- import statically allows methods to be
                               //     used without class name qualification

namespace RectangleDemo {
    // <rectangle definition here>

    class Demo {
        static void Main(string[] args) {
            Rectangle r = new Rectangle();
            Rectangle s = new Rectangle(5, 6);
            r.Display();
            s.Display();
            WaitForReturn();
        }
    }
}