繁体   English   中英

在与C#中的类不同的文件中包含Main()例程

[英]Having a Main() routine in a separate file from a Class in C#

最近,我从使用gVIM编写的C ++扩展到使用Visual Studio Express编写的C#。 有人告诉我,我必须学习很多知识才能真正有效地使用C#,但这是我的问题:

在C ++中,编写类或数据类型时,我将为类定义和驱动程序提供单独的文件。 然后,我将#include包含在驱动程序中以便使用它。 目前还不清楚如何在Visual Studio Express 2013中执行此操作,并且我查找的所有教程都在同一文件中包含类定义和Main()例程。

我的解决方案文件夹中目前只有两个文件:驱动程序p1.cs和类型definition / implementation targetInt.cs 允许p1.cstargetInt.cs类型一起使用的最佳方法是什么? 它是否会由于成为同一解决方案的一部分而简单地获得访问权限? 如果是这样,我该如何避免类型定义中没有Main()例程?

这是解决方案的屏幕快照,以及尝试构建解决方案时遇到的错误。 尝试在p1.cs中声明一个targetInt对象(指向已共享的命名空间)时,我没有得到任何错误。

http://i793.photobucket.com/albums/yy218/tombombodil/solution_zps6a743e2d.png

让我知道是否需要澄清任何事情。

您所写的问题归结为缺少共享名称空间的简单原因-因为targetInit存在于单独的名称空间中,所以Program需要using targetInit.cs来访问targetInit类型。 但是,它们可以由于在同一个项目中而彼此访问-一个解决方案可以包含多个项目,并且如果它们彼此不引用,则它们将无法访问彼此的类型。

通常,任何给定类的naemspace实际上是它的文件夹路径,并且类名与文件名相同(在创建新的类文件时Visual Studio会为您提供)。

至于Main()定义,您只需要其中之一,因为在程序开始时,系统只有一个入口可以跳转到该入口-在操作系统需要一个Main()函数时,具有多个Main()函数没有多大意义。明确的地方开始执行。

位于同一文件中的Main()方法和类定义很方便,因此所有代码都可以一起读取-了解如何设置实际项目,尝试转到GitHub并创建两个开源项目。

确实不是很复杂,但是它与C ++不同。 因此,如果您有一个看起来像这样的文件:

namespace MyNamespace
{
    public class MyClass
    {
        //...stuff
    }
}

然后,您想要带有Main另一个文件(除了一个简单的项目之外,您还将执行其他操作),它看起来像这样:

using MyNamespace;   // unless you use the same namespace for both

namespace SomeOtherNamespace
{
    class Program
    {
        static void Main(string[] args)
        {
            var c = new MyClass();
            // alternatively, without the using statement, you can just fully qualify 
            // your class name like so:
            // var c = new MyNamespace.MyClass();
        }
    }
}

但是请注意,文件必须位于同一项目中 如果它们在不同的项目中,您仍然可以执行此操作,但是您必须将对MyClass的引用添加到Program 您不能做的就是在解决方案中浮动一个孤立的C#文件,并期望它能正常工作。

有两种方法可以直接在C#中使用另一个类:
1将那个类放在与我的类相同的名称空间中(即使它们位于单独的文件中),此代码也澄清了这一点:

//file TargetInt.cs
namespace MyNameSpace
{
    class TargetInt
    {
    }
}  
//file p1.cs
namespace MyNameSpace
{
    class p1
    {
        static void Main(string[] args)
        {
        }
    }
}

请注意,这两个类都在MyNameSpace命名空间中。
2-如果另一个类包含在另一个名称空间中,则可以通过在文件的开头声明以下语句来简单地使用它:

//file TargetInt.cs
namespace OtherNameSpace
{
    class TargetInt
    {
    }
}
//file p1.cs
using OtherNameSpace;
namespace MyNameSpace
{
    class p1
    {
        static void Main(string[] args)
        {
        }
    }
}

using OtherNameSpace; 您可以直接使用TargetInt类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM