C# 实用程序 Class - 为通用设置和编译 w/o Main
C# Utility Class - Setting up for General Use and Compiling w/o Main
好的,开始学习一些 C#。很棒的语言,总的来说喜欢使用它,但我不明白如何克服这种缺乏实用性的问题 classes。本质上,我想设置一个通用实用程序 class,它可以包含在一个文件夹中,只需执行 "using namespace Globals/Utilities/etc." 命令即可用于任何项目。本质上:
using System;
namespace Globals {
public static class Commands {
public static void WaitForReturn() {
Console.WriteLine("Press Enter to continue.");
Console.ReadLine();
}
}
}
与上述类似,因此在任何其他 class 中,我可以通过将其作为预处理指令包含在内来调用这些函数。
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();
}
}
}
事实上,我正在尝试简单地编译我的 'utility' class(比上面列出的更多)来检查错误,但它只是告诉我它可以'不要编译它,因为没有 main 方法。有什么建议吗?
(是的,我知道我有 java 编码风格,我同意!)
使用 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 的建议,如果您不需要主入口点,请使用 Class 库项目而不是控制台应用程序。
C# 无法按您期望的方式工作。导入 namespaces/classes 和文件之间没有关系,因此 using Globals;
不会转化为文件内容包含 à la C/C++(即与 #include "Globals.cs"
不同)。
在命令行上,C# 编译器接受构成源的文件列表:
csc Demo.cs Globals.cs
如果您正在使用 IDE,例如 Visual Studio,您会 link 将 Globals.cs
放入您的项目中。 link,我的意思是更像是一个象征性的 link(尽管实际上并非如此),而不是通过 [= 静态 linking 36=]er 就像通常在 C/C++ 设置中那样。
因此,为了使“包含公共代码”的方案生效,您需要通过简单地始终将 Globals.cs
添加到构成项目的 C# 文件列表中进行编译(在命令中提供给编译器行或添加到 IDE 中的项目),然后使用 static import:
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();
}
}
}
好的,开始学习一些 C#。很棒的语言,总的来说喜欢使用它,但我不明白如何克服这种缺乏实用性的问题 classes。本质上,我想设置一个通用实用程序 class,它可以包含在一个文件夹中,只需执行 "using namespace Globals/Utilities/etc." 命令即可用于任何项目。本质上:
using System;
namespace Globals {
public static class Commands {
public static void WaitForReturn() {
Console.WriteLine("Press Enter to continue.");
Console.ReadLine();
}
}
}
与上述类似,因此在任何其他 class 中,我可以通过将其作为预处理指令包含在内来调用这些函数。
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();
}
}
}
事实上,我正在尝试简单地编译我的 'utility' class(比上面列出的更多)来检查错误,但它只是告诉我它可以'不要编译它,因为没有 main 方法。有什么建议吗?
(是的,我知道我有 java 编码风格,我同意!)
使用 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 的建议,如果您不需要主入口点,请使用 Class 库项目而不是控制台应用程序。
C# 无法按您期望的方式工作。导入 namespaces/classes 和文件之间没有关系,因此 using Globals;
不会转化为文件内容包含 à la C/C++(即与 #include "Globals.cs"
不同)。
在命令行上,C# 编译器接受构成源的文件列表:
csc Demo.cs Globals.cs
如果您正在使用 IDE,例如 Visual Studio,您会 link 将 Globals.cs
放入您的项目中。 link,我的意思是更像是一个象征性的 link(尽管实际上并非如此),而不是通过 [= 静态 linking 36=]er 就像通常在 C/C++ 设置中那样。
因此,为了使“包含公共代码”的方案生效,您需要通过简单地始终将 Globals.cs
添加到构成项目的 C# 文件列表中进行编译(在命令中提供给编译器行或添加到 IDE 中的项目),然后使用 static import:
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();
}
}
}