![](/img/trans.png)
[英]Why do we have to explicitly specify “this” when invoking an extension method from within a method of a class being extended?
[英]Why do we need to spawn another process when invoking the public Main can be made possible?
假設我有 3 個獨立的 .net 核心控制台應用程序項目: HelloWorld
、 Consumer
和Spawner
。
假設程序集HelloWorld
來自第三方。 而且我知道它的Main
方法是公開的。
你好世界:
namespace HelloWorld
{
public class HelloWorld
{
public static void Main()
{
Console.WriteLine("Hello World");
}
}
}
消費者:
namespace Consumer
{
class Consumer
{
static void Main()
{
HelloWorld.HelloWorld.Main();
}
}
}
生成器:
namespace Spawner
{
class Spawner
{
static void Main()
{
Process p = new Process();
p.StartInfo.FileName = "HelloWorld.exe";
p.Start();
p.WaitForExit();
}
}
}
現在我想使用HelloWorld
程序集。 我必須實現哪種方法,像在Consumer
項目中那樣調用還是像在Spawner
項目中那樣生成?
調用程序集的public Main
和使用Process
調用程序集有什么區別?
我在想為什么我們不總是公開Main
以便其他人可以使用 2 個選項調用它:調用該方法或產生一個新進程。 還是我的理解有誤? 也歡迎任何意見!
你幾乎回答了自己,你不需要產生一個單獨的進程。 您可以從不同的控制台應用程序調用公共Main()
並且它將起作用。
但是,如果您遇到這種情況,您可能不得不質疑自己為什么首先將它們分開。 需要不同的入口點來保持這些東西彼此獨立運行、單獨部署等。明顯的最大區別是,當產生不同的進程時,它會自動完全並行運行。
調用程序集的公共 Main 和使用 Process 調用程序集有什么區別?
Consumer.Main
調用HelloWorld.Main
就像調用任何其他方法一樣,因此HelloWorld.Main
與Consumer
在同一進程(和線程等)中運行。 您可以將強類型 arguments 傳遞給它, HelloWorld
和Consumer
將共享static
state,如果一個部分導致崩潰,兩個部分都將停止,等等。
Spawner.Main
啟動一個單獨的進程; 請參閱Process
的文檔。 就像您自己在命令行上調用了HelloWorld
一樣。 Spawner 和HelloWorld
之間沒有共享的Spawner
。 Spawner
啟動的過程甚至不需要在 C# 或 .NET 中編寫。
通常:
如果HelloWorld
是一個庫,那么編寫HelloWorld
的人希望您引用它並從您自己的代碼中調用它。 但是在這種情況下,像Main
這樣的名稱非常罕見。 通常,您可以調用許多方法來執行不同的操作,這些方法具有更具體的名稱、參數、返回類型等。
如果HelloWorld
是一個獨立的應用程序,那么編寫HelloWorld
的人希望您將它作為一個單獨的進程調用,包括來自可能與調用者不同的技術堆棧。 (例如,C# 可以使用Process
object 來啟動以許多其他語言編寫的程序的進程。)
我在想為什么我們不總是公開 Main 以允許其他人使用 2 個選項調用程序集:調用方法或產生新進程。
你並不總是想讓人們選擇。 也許您的Main
做了一些基本設置,而您的程序的 rest 需要 - 在這種情況下,您不希望其他人將您的Main
作為某個單獨程序的一部分調用,這些程序的設置可能不同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.