Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Main
yöntemi, bir C# uygulamasının giriş noktasıdır. 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 hangisini kullanacağınızı belirtmek için programınızı StartupObject ile derlemeniz gerekir. Daha fazla bilgi için bkz . StartupObject (C# Derleyici Seçenekleri).
Aşağıda, yürütülen ilk satırın komut satırı bağımsız değişkenlerinin sayısını görüntülediği örnek verilmiştir:
class TestClass
{
static void Main(string[] args)
{
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.
Aşağıdaki örnek, foreach
değişkenini kullanarak komut satırı bağımsız değişkenlerini görüntülemek için bir args
döngüsü kullanır ve programın sonunda bir başarı kodu döndürür (0
):
using System.Text;
StringBuilder builder = new();
builder.AppendLine("The following arguments are passed:");
foreach (var arg in args)
{
builder.AppendLine($"Argument={arg}");
}
Console.WriteLine(builder.ToString());
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 bildirilmelidir. Kapsayanclass
olabilirstatic
. -
Main
olmalıdırstatic
. -
Main
herhangi bir erişim değiştiricisi olabilir (dışındafile
). -
Main
, ,void
veyaint
Task
dönüş türüne sahipTask<int>
olabilir. - Ancak ve ancak
Main
birTask
veyaTask<int>
döndürürse, bildirimiMain
değiştirici olarakasync
içerebilir. Bu özellikle birasync void Main
yöntemi dışlar. -
Main
yöntemi, komut satırı bağımsız değişkenleri içeren birstring[]
parametre ile veya parametre olmadan bildirilebilir. Windows uygulamaları oluşturmak için Visual Studio kullanırken, parametreyi el ile ekleyebilir ya da komut satırı bağımsız değişkenlerini almak için GetCommandLineArgs() yöntemini de kullanabilirsiniz. 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 en yaygın Main
bildirimler gösterilmektedir:
static void Main() { }
static int Main() { }
static void Main(string[] args) { }
static int Main(string[] args) { }
static async Task Main() { }
static async Task<int> Main() { }
static async Task Main(string[] args) { }
static async Task<int> Main(string[] args) { }
Yukarıdaki örnekler bir erişim değiştirici belirtmediğinden varsayılan olarak örtük olarak private
gösterilir. Bu tipik bir durum olsa da herhangi bir açık erişim değiştirici belirtmek mümkündür.
İpucu
async
ve Task
eklenmesi, Task<int>
dönüş türleri, konsol uygulamalarının await
zaman uyumsuz işlemler başlatması gerektiğinde Main
içinde program kodunu basitleştirir.
Main() dönüş değerleri
yöntemini aşağıdaki yollardan biriyle tanımlayarak yönteminden int
bir Main
döndürebilirsiniz:
Main bildirim |
Main yöntem kodu |
---|---|
static int Main() |
args veya await kullanımına yer yok |
static int Main(string[] args) |
kullanır args , kullanımı yok await |
static async Task<int> Main() |
Kullanımı args yok, await kullanılıyor. |
static async Task<int> Main(string[] args) |
Kullanır args ve await |
değerinin Main
dönüş değeri kullanılmazsa, döndürme void
veya Task
biraz daha basit koda izin verir.
Main bildirim |
Main yöntem kodu |
---|---|
static void Main() |
args veya await kullanımına yer yok |
static void Main(string[] args) |
kullanır args , kullanımı yok await |
static async Task Main() |
Kullanımı args yok, await kullanılıyor. |
static async Task Main(string[] args) |
Kullanır args ve await |
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:
class MainReturnValTest
{
static int Main()
{
//...
return 0;
}
}
Bu programı MainReturnValTest.csolarak kaydetmeyi unutmayın.
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 ERRORLEVEL
kullanılarak bir toplu iş dosyasından veya $LastExitCode
kullanılarak PowerShell'den alınabilir.
Uygulamayı dotnet CLIdotnet build
komutunu kullanarak 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 gidip test.ps1
yazarak 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
Asenkron Ana dönüş değerleri
async
için bir Main
dönüş değeri bildirdiğinizde, derleyici Main
zaman uyumsuz yöntemleri çağırmak için şablon 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 int Main()
{
return AsyncConsoleWork().GetAwaiter().GetResult();
}
private static async Task<int> AsyncConsoleWork()
{
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()
{
return 0;
}
}
Her iki örnekte de programın ana gövdesi AsyncConsoleWork()
yönteminin gövdesindedir.
Derleyicinin her zaman doğru kodu oluşturmasının bir avantajı, bildirimin Main
olarak async
yapılması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 async
değiştiricisini Main
yöntemi üzerinde kullandıysa, derleyici aynı kodu oluştururdu.
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 bildirim |
Main yöntem kodu |
---|---|
static void Main(string[] args) |
Dönüş değeri yok, await kullanılmaz. |
static int Main(string[] args) |
Dönüş değeri, kullanımı yok await |
static async Task Main(string[] args) |
Dönüş değeri yok, kullanır await |
static async Task<int> Main(string[] args) |
Dönüş değerini, await kullanır. |
Bağımsız değişkenler kullanılmazsa, biraz daha basit bir kod için yöntem bildiriminden args
'yi çıkartabilirsiniz.
Main bildirim |
Main yöntem kodu |
---|---|
static void Main() |
Dönüş değeri yok, await kullanılmaz. |
static int Main() |
Dönüş değeri, kullanımı yok await |
static async Task Main() |
Dönüş değeri yok, kullanır await |
static async Task<int> Main() |
Dönüş değerini, await kullanır. |
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. Bir Windows Forms uygulamasında yöntem bildiriminde Main
komut satırı bağımsız değişkenlerini etkinleştirmek için bildirimini 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, Convert sınıfını veya Parse
yöntemini kullanarak 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ı long
olan C# türünü Int64
kullanmak da mümkündür:
long num = long.Parse(args[0]);
Aynı işlemi yapmak için sınıf yöntemini Convert
de kullanabilirsinizToInt64
:
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) { if (args.Length == 0) { Console.WriteLine("Please enter a numeric argument."); Console.WriteLine("Usage: Factorial <num>"); return 1; } 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; } long result = Functions.Factorial(num); if (result == -1) Console.WriteLine("Input must be >= 0 and <= 20."); else Console.WriteLine($"The Factorial of {num} is {result}."); return 0; } }
Main
yönteminin başında program,args
bağımsız değişkeninin uzunluğunu0
ile karşılaştırarak giriş bağımsız değişkenlerinin sağlanmadığını test eder ve bağımsız değişken bulunamazsa yardımı görüntüler.
Bağımsız değişkenler sağlanıyorsa (args.Length
0'dan büyükse) program giriş bağımsız değişkenlerini sayılara dönüştürmeye çalışır. Bağımsız değişken bir sayı değilse, bir istisna fırlatır.
Faktöriyel hesaplandıktan sonra (result
türündekilong
değişkende depolanır),result
değişkenine bağlı olarak ayrıntılı sonuç yazdırılır.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
Programın bağımsız değişkeni olarak komut satırına 3 girilirse çıkış şu şekilde olur:
The factorial of 3 is 6.
Not
Visual Studio'da bir uygulama çalıştırırken, Hata Ayıklama Sayfası, Proje Tasarımcısı'nda komut satırı bağımsız değişkenleri 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.