簡體   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