Ana() ve komut satırı bağımsız değişkenleri
Main
yöntemi, bir C# uygulamasının giriş noktasıdır. (Kitaplıklar ve hizmetler giriş noktası olarak bir Main
yöntem gerektirmez.) Uygulama başlatıldığında, Main
yöntemi çağrılan ilk yöntemdir.
C# programında yalnızca bir giriş noktası olabilir. Yöntemi olan Main
birden fazla sınıfınız varsa, giriş noktası olarak hangi Main
yöntemin kullanılacağını belirtmek için programınızı StartupObject derleyici seçeneğiyle derlemeniz gerekir. Daha fazla bilgi için bkz . StartupObject (C# Derleyici Seçenekleri).
class TestClass
{
static void Main(string[] args)
{
// Display the number of command line arguments.
Console.WriteLine(args.Length);
}
}
Uygulamanızın giriş noktası olarak bir dosyada Üst düzey deyimleri de kullanabilirsiniz.
Yönteminde Main
olduğu gibi, üst düzey deyimler de değer döndürebilir ve komut satırı bağımsız değişkenlerine erişebilir.
Daha fazla bilgi için bkz . Üst düzey deyimler.
using System.Text;
StringBuilder builder = new();
builder.AppendLine("The following arguments are passed:");
// Display the command line arguments using the args variable.
foreach (var arg in args)
{
builder.AppendLine($"Argument={arg}");
}
Console.WriteLine(builder.ToString());
// Return a success code.
return 0;
Genel bakış
Main
yöntemi yürütülebilir bir programın giriş noktasıdır; program denetiminin başladığı ve bittiği yerdir.Main
bir sınıf veya yapı içinde bildirilir.Main
olmalıdırstatic
ve olmasıpublic
gerekmez. (Önceki örnekte varsayılan erişiminiprivate
alır.) Bir kapsayanclass
olabilirstatic
.Main
, ,int
veyaTask
Task<int>
dönüş türüne sahipvoid
olabilir.- Yalnızca veya döndürürse
Task<int>
Task
ve iseMain
bildirimiMain
değiştiriciyiasync
içerebilir. Bu özellikle birasync void Main
yöntemi dışlar. - yöntemi,
Main
komut satırı bağımsız değişkenleri içeren birstring[]
parametreyle veya parametresiz olarak bildirilebilir. Windows uygulamaları oluşturmak için Visual Studio kullanırken, parametresini el ile ekleyebilir veya komut satırı bağımsız değişkenlerini almak için yöntemini kullanabilirsiniz GetCommandLineArgs() . Parametreler sıfır dizinli komut satırı bağımsız değişkenleri olarak okunur. C ve C++'ın aksine, programın adı dizidekiargs
ilk komut satırı bağımsız değişkeni olarak değerlendirilmez, ancak yöntemin GetCommandLineArgs() ilk öğesidir.
Aşağıdaki listede geçerli Main
imzalar gösterilmektedir:
public static void Main() { }
public static int Main() { }
public static void Main(string[] args) { }
public static int Main(string[] args) { }
public static async Task Main() { }
public static async Task<int> Main() { }
public static async Task Main(string[] args) { }
public static async Task<int> Main(string[] args) { }
Yukarıdaki örneklerin tümü erişimci değiştiricisini public
kullanır. Bu tipiktir, ancak gerekli değildir.
ve Task
öğesinin eklenmesi, Task<int>
konsol uygulamalarının async
içinde Main
zaman uyumsuz işlemler başlatması await
gerektiğinde program kodunu basitleştirir.
Main() dönüş değerleri
yöntemini aşağıdaki yollardan biriyle tanımlayarak yönteminden Main
bir int
döndürebilirsiniz:
Main yöntem kodu |
Main Imza |
---|---|
veya kullanımı args yok await |
static int Main() |
kullanır args , kullanımı yok await |
static int Main(string[] args) |
kullanımı args yok, kullanımları await |
static async Task<int> Main() |
ve kullanır args await |
static async Task<int> Main(string[] args) |
değerinin Main
dönüş değeri kullanılmazsa, döndürme void
veya Task
biraz daha basit koda izin verir.
Main yöntem kodu |
Main Imza |
---|---|
veya kullanımı args yok await |
static void Main() |
kullanır args , kullanımı yok await |
static void Main(string[] args) |
kullanımı args yok, kullanımları await |
static async Task Main() |
ve kullanır args await |
static async Task Main(string[] args) |
Ancak, geri döndürmek int
veya Task<int>
programın yürütülebilir dosyayı çağıran diğer programlara veya betiklere durum bilgilerini iletmesini sağlar.
Aşağıdaki örnekte, işlemin çıkış koduna nasıl erişilebileceği gösterilmektedir.
Bu örnekte .NET Core komut satırı araçları kullanılmıştır. .NET Core komut satırı araçlarını bilmiyorsanız, bu başlangıç makalesinde bu araçlar hakkında bilgi edinebilirsiniz.
komutunu çalıştırarak dotnet new console
yeni bir uygulama oluşturun. Main
Program.cs yöntemini aşağıdaki gibi değiştirin:
// Save this program as MainReturnValTest.cs.
class MainReturnValTest
{
static int Main()
{
//...
return 0;
}
}
Bir program Windows'ta yürütürken, işlevden Main
döndürülen tüm değerler bir ortam değişkeninde depolanır. Bu ortam değişkeni bir toplu iş dosyasından veya $LastExitCode
PowerShell'den kullanılarak ERRORLEVEL
alınabilir.
Dotnet CLIdotnet build
komutunu kullanarak uygulamayı oluşturabilirsiniz.
Ardından, uygulamayı çalıştırmak ve sonucu görüntülemek için bir PowerShell betiği oluşturun. Aşağıdaki kodu bir metin dosyasına yapıştırın ve projeyi içeren klasörde olduğu gibi test.ps1
kaydedin. PowerShell istemine yazarak test.ps1
PowerShell betiğini çalıştırın.
Kod sıfır döndürdüğünden, toplu iş dosyası başarıyı bildirir. Ancak, MainReturnValTest.cs sıfır olmayan bir değer döndürecek şekilde değiştirir ve ardından programı yeniden derlerseniz, PowerShell betiğinin sonraki yürütülmesi hata bildirir.
dotnet run
if ($LastExitCode -eq 0) {
Write-Host "Execution succeeded"
} else
{
Write-Host "Execution Failed"
}
Write-Host "Return value = " $LastExitCode
Execution succeeded
Return value = 0
Zaman Uyumsuz Ana dönüş değerleri
için Main
bir async
dönüş değeri bildirdiğinizde, derleyici içinde zaman uyumsuz yöntemleri Main
çağırmak için ortak kodu oluşturur. Anahtar sözcüğü belirtmezseniz async
, aşağıdaki örnekte gösterildiği gibi bu kodu kendiniz yazmanız gerekir. Örnekteki kod, zaman uyumsuz işlem tamamlanana kadar programınızın çalışmasını sağlar:
class AsyncMainReturnValTest
{
public static void Main()
{
AsyncConsoleWork().GetAwaiter().GetResult();
}
private static async Task<int> AsyncConsoleWork()
{
// Main body here
return 0;
}
}
Bu ortak kod şu şekilde değiştirilebilir:
class Program
{
static async Task<int> Main(string[] args)
{
return await AsyncConsoleWork();
}
private static async Task<int> AsyncConsoleWork()
{
// main body here
return 0;
}
}
Bildirimin Main
async
bir avantajı, derleyicinin her zaman doğru kodu oluşturmasıdır.
Uygulama giriş noktası veya Task
Task<int>
döndürdüğünde derleyici, uygulama kodunda bildirilen giriş noktası yöntemini çağıran yeni bir giriş noktası oluşturur. Bu giriş noktasının olarak adlandırıldığını $GeneratedMain
varsayarsak, derleyici bu giriş noktaları için aşağıdaki kodu oluşturur:
static Task Main()
eşdeğerini yayan derleyiciyle sonuçprivate static void $GeneratedMain() => Main().GetAwaiter().GetResult();
static Task Main(string[])
eşdeğerini yayan derleyiciyle sonuçprivate static void $GeneratedMain(string[] args) => Main(args).GetAwaiter().GetResult();
static Task<int> Main()
eşdeğerini yayan derleyiciyle sonuçprivate static int $GeneratedMain() => Main().GetAwaiter().GetResult();
static Task<int> Main(string[])
eşdeğerini yayan derleyiciyle sonuçprivate static int $GeneratedMain(string[] args) => Main(args).GetAwaiter().GetResult();
Not
Örnekler yönteminde Main
değiştirici kullandıysaasync
, derleyici aynı kodu oluşturur.
Komut Satırı Bağımsız Değişkenleri
Yöntemini aşağıdaki yollardan biriyle tanımlayarak yöntemine bağımsız değişkenler Main
gönderebilirsiniz:
Main yöntem kodu |
Main Imza |
---|---|
Dönüş değeri yok, kullanımı yok await |
static void Main(string[] args) |
Dönüş değeri, kullanımı yok await |
static int Main(string[] args) |
Dönüş değeri yok, kullanır await |
static async Task Main(string[] args) |
Dönüş değeri, kullanır await |
static async Task<int> Main(string[] args) |
Bağımsız değişkenler kullanılmazsa, biraz daha basit bir kod için yöntem imzasından atlayabilirsiniz args
:
Main yöntem kodu |
Main Imza |
---|---|
Dönüş değeri yok, kullanımı yok await |
static void Main() |
Dönüş değeri, kullanımı yok await |
static int Main() |
Dönüş değeri yok, kullanır await |
static async Task Main() |
Dönüş değeri, kullanır await |
static async Task<int> Main() |
Not
Ya da Environment.CommandLineEnvironment.GetCommandLineArgs kullanarak konsol veya Windows Forms uygulamasının herhangi bir noktasından komut satırı bağımsız değişkenlerine erişebilirsiniz. Windows Forms uygulamasındaki yöntem imzasında Main
komut satırı bağımsız değişkenlerini etkinleştirmek için, imzasını Main
el ile değiştirmeniz gerekir. Windows Forms tasarımcısı tarafından oluşturulan kod, giriş parametresi olmadan oluşturulur Main
.
yönteminin Main
parametresi, komut satırı bağımsız değişkenlerini temsil eden bir String dizidir. Genellikle özelliği test ederek bağımsız değişkenlerin Length
mevcut olup olmadığını belirlersiniz, örneğin:
if (args.Length == 0)
{
System.Console.WriteLine("Please enter a numeric argument.");
return 1;
}
İpucu
Dizi args
null olamaz. Bu nedenle, null denetimi olmadan özelliğine Length
erişmek güvenlidir.
Ayrıca, sınıfını veya Parse
yöntemini kullanarak Convert dize bağımsız değişkenlerini sayısal türlere dönüştürebilirsiniz. Örneğin, aşağıdaki deyim yöntemini kullanarak öğesini string
bir long
sayıya Parse dönüştürür:
long num = Int64.Parse(args[0]);
Diğer adları Int64
olan C# türünü long
kullanmak da mümkündür:
long num = long.Parse(args[0]);
Aynı işlemi yapmak için sınıf yöntemini ToInt64
de kullanabilirsinizConvert
:
long num = Convert.ToInt64(s);
Daha fazla bilgi için bkz. Parse ve Convert.
İpucu
Komut satırı bağımsız değişkenlerini ayrıştırma karmaşık olabilir. İşlemi basitleştirmek için System.CommandLine kitaplığını (şu anda beta sürümündedir) kullanmayı göz önünde bulundurun.
Aşağıdaki örnekte, konsol uygulamasında komut satırı bağımsız değişkenlerinin nasıl kullanılacağı gösterilmektedir. Uygulama çalışma zamanında bir bağımsız değişken alır, bağımsız değişkeni tamsayıya dönüştürür ve sayının faktöriyelini hesaplar. Bağımsız değişken sağlanmazsa, uygulama programın doğru kullanımını açıklayan bir ileti görüntüler.
Uygulamayı bir komut isteminden derlemek ve çalıştırmak için şu adımları izleyin:
Aşağıdaki kodu herhangi bir metin düzenleyicisine yapıştırın ve dosyayı Factorial.cs adlı bir metin dosyası olarak kaydedin.
public class Functions { public static long Factorial(int n) { // Test for invalid input. if ((n < 0) || (n > 20)) { return -1; } // Calculate the factorial iteratively rather than recursively. long tempResult = 1; for (int i = 1; i <= n; i++) { tempResult *= i; } return tempResult; } } class MainClass { static int Main(string[] args) { // Test if input arguments were supplied. if (args.Length == 0) { Console.WriteLine("Please enter a numeric argument."); Console.WriteLine("Usage: Factorial <num>"); return 1; } // Try to convert the input arguments to numbers. This will throw // an exception if the argument is not a number. // num = int.Parse(args[0]); int num; bool test = int.TryParse(args[0], out num); if (!test) { Console.WriteLine("Please enter a numeric argument."); Console.WriteLine("Usage: Factorial <num>"); return 1; } // Calculate factorial. long result = Functions.Factorial(num); // Print result. if (result == -1) Console.WriteLine("Input must be >= 0 and <= 20."); else Console.WriteLine($"The Factorial of {num} is {result}."); return 0; } } // If 3 is entered on command line, the // output reads: The factorial of 3 is 6.
Başlangıç ekranından veya Başlat menüsünden bir Visual Studio Geliştirici Komut İstemi penceresi açın ve oluşturduğunuz dosyayı içeren klasöre gidin.
Uygulamayı derlemek için aşağıdaki komutu girin.
dotnet build
Uygulamanızda derleme hatası yoksa, Factorial.exe adlı bir yürütülebilir dosya oluşturulur.
3'ün faktöriyelini hesaplamak için aşağıdaki komutu girin:
dotnet run -- 3
komutu şu çıkışı üretir:
The factorial of 3 is 6.
Not
Visual Studio'da bir uygulama çalıştırırken, Hata Ayıklama Sayfası, Project Tasarım Aracı komut satırı bağımsız değişkenlerini belirtebilirsiniz.
C# dili belirtimi
Daha fazla bilgi edinmek için, bkz. C# Dil Belirtimi. Dil belirtimi, C# sözdizimi ve kullanımı için kesin bir kaynaktır.
Ayrıca bkz.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin