Klasik ilk program tek bir satır metin yazdırır. C#'ta şöyle görünür:
Çıktı:
Hello, World!
Satır satır
using System;tam ad olanSystem.ConsoleyerineConsoleyazmanızı sağlar.Console,Systemnamespace'indeki bir sınıftır (bkz. namespace'ler ve using).class Programbir sınıf bildirir. Tüm C# kodu bir tipin içinde yaşar;Programadı bir gelenektir, zorunluluk değildir.static void Main()giriş noktasıdır. Program başladığında çalışma zamanıMainadlı statik bir metot arar ve onu çağırır.static, metodun sınıfın kendisine ait olduğu anlamına gelir, yani önce bir nesne oluşturmak gerekmez.voidhiçbir şey döndürmediğini belirtir.Console.WriteLine("Hello, World!");WriteLinemetodunu bir string argümanıyla çağırır. Her ifade noktalı virgülle biter.- Süslü parantezler
{ }sınıfın ve metodun gövdesini işaretler.
C# büyük/küçük harfe duyarlıdır. console.writeline ve main, Console.WriteLine ve Main'den farklı adlardır ve ikisi de mevcut değildir.
Console.WriteLine ile Console.Write
WriteLine metinden sonra bir satır sonu ekler. Write eklemez, bu yüzden sonraki çıktı aynı satırda devam eder. İkisi de yalnızca string'leri değil her tipi kabul eder: sayılar, boolean'lar ve nesneler ToString() metotlarıyla dönüştürülür.
Çıktı:
Loading.. done
42
True
Item: coffee
coffee costs 3.20
coffee costs 3.20
true'nun True olarak yazdırıldığına dikkat edin: bool.ToString() bunu döndürür. String interpolation denen $"..." biçimi en çok kullanacağınız biçimdir; :F2 gibi biçim kodları için string interpolation sayfasına bakın.
Console.ReadLine ile girdi okumak
Console.ReadLine() kullanıcının bir satır yazıp Enter'a basmasını bekler, sonra o satırı satır sonu olmadan string olarak döndürür. Girdinin sonunda (örneğin girdi, içeriği biten bir dosyadan yönlendirildiğinde) null döndürür.
Çıktı:
What is your name? How old are you?
Hi Maya, next year you will be 28.
Bunu bir terminalde çalıştırdığınızda yazdığınız metin her sorudan sonra görünür. Yukarıdaki çıktıda yazılmış metin yok, çünkü girdi elle yazılmadı, yönlendirildi (pipe ile verildi); bu yüzden yalnızca programın kendisinin yazdıkları görünür.
ReadLine her zaman metin döndürür. Değeri sayı olarak kullanmak için dönüştürmeniz gerekir. int.Parse(text) metin sayı değilse bir FormatException fırlatır; int.TryParse ise bunun yerine false döndürür, kullanıcı girdisi için doğru seçim olmasının nedeni budur. Ayrıntılar tip dönüşümü sayfasında.
İlgili iki metot daha: Console.Read() bir sonraki karakteri int kodu olarak döndürür, Console.ReadKey() ise Enter'ı beklemeden tek bir tuş basışını okur (yalnızca etkileşimli bir terminalde çalışır).
Main metodunun diğer biçimleri
Main komut satırı argümanlarını alabilir ve bir çıkış kodu döndürebilir. Bunların hepsi geçerli giriş noktalarıdır:
static void Main()
static void Main(string[] args)
static int Main()
static int Main(string[] args)
static async Task Main() // C# 7.1 and later
static async Task<int> Main(string[] args) // C# 7.1 and later
Döndürülen int sürecin çıkış kodu olur; betikler ve CI sistemleri programın başarılı olup olmadığına karar vermek için onu okur (geleneksel olarak 0 başarı demektir).
Çıktı:
Got 0 argument(s)
dotnet run -- apples pears ile çalıştırırsanız args, "apples" ve "pears" değerlerini tutar. --, programınızın argümanlarını dotnet aracının argümanlarından ayırır.
Yorumlar
C#'ta üç tür yorum vardır. Derleyici hepsini yok sayar.
// A single-line comment runs to the end of the line.
/* A block comment
can span several lines. */
/// <summary>
/// An XML documentation comment. Editors show it as the tooltip for the method.
/// </summary>
static decimal ApplyDiscount(decimal price) => price * 0.9m;
Kod içindeki notlar için // kullanın. /// yorumları tiplerin ve public üyelerin üstüne yazılır; IDE bir çağrının üzerine geldiğinizde onları gösterir ve derleyici onları dokümantasyon araçları için bir XML dosyasına aktarabilir.
dotnet ile proje oluşturup çalıştırmak
Kendi bilgisayarınızda dotnet.microsoft.com adresinden .NET SDK'yı kurun, sonra:
dotnet new console -o HelloApp
cd HelloApp
dotnet run
Hello, World!
dotnet new console iki dosya oluşturur: HelloApp.csproj (proje dosyası: hedef framework, ayarlar, paket referansları) ve Program.cs. dotnet run projeyi derler ve çalıştırır. dotnet build çalıştırmadan derler ve çıktıyı bin/Debug/net8.0/ klasörüne yazar (klasör adı hedef framework'ünüze göre değişir).
Top-level statements (C# 9 ve sonrası)
Üretilen Program.cs dosyasını açtığınızda yalnızca şunu bulursunuz:
// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");
Bu bir top-level statements programıdır, C# 9 özelliğidir. Derleyici ifadelerinizin çevresinde Program sınıfını ve Main metodunu üretir. using System; da eksiktir, çünkü .NET 6 ve sonraki projeler implicit usings özelliğini açar: System, System.IO, System.Linq ve System.Collections.Generic gibi yaygın namespace'ler tüm proje için içe aktarılır.
Top-level programlar yine de args'ı okuyabilir, await kullanabilir ve bir çıkış kodu return edebilir:
// C# 9 and later: the whole Program.cs
Console.Write("Name: ");
string? name = Console.ReadLine();
Console.WriteLine($"Hello, {name}! You passed {args.Length} arguments.");
return 0;
Bir projede yalnızca bir dosya top-level statements içerebilir ve tipler (class'lar, record'lar) onlardan sonra gelmelidir. string? işareti bir nullable referans tipidir (C# 8) ve ReadLine null döndürebildiği için oradadır. Bu sayfadaki örneklerde kullanılan açık class Program biçimi eşdeğerdir; eski kodda ve çoğu Unity betiğinde bunu görürsünüz, bu yüzden ikisini de okuyabilmek işe yarar. Yeni projelerde açık biçimi tercih ediyorsanız dotnet new console komutuna --use-program-main verin.
İlk göreceğiniz hatalar
- CS1002: ; expected. Bir ifadenin noktalı virgülü eksik. Hata, noktalı virgülün eksik olduğu satırın sonunda bildirilir.
- CS0103: The name 'console' does not exist in the current context. Yanlış büyük/küçük harf ya da implicit usings olmayan bir projede eksik
using System;. - CS5001: Program does not contain a static 'Main' method suitable for an entry point.
Mainyanlış yazılmış,staticdeğil ya da desteklenmeyen bir imzası var. - CS0017: Program has more than one entry point defined. İki sınıfın her birinde bir
Mainvar. Birini tutun ya da.csprojiçindekiStartupObjectayarıyla birini seçin. - Pencere hemen kapanıyor. Bir konsol uygulaması çift tıklanarak başlatıldığında pencere
Maindöndüğü anda kapanır. Onu bir terminalden çalıştırın ya da test ederken sonaConsole.ReadKey();ekleyin.
Sıkça Sorulan Sorular
C#'ta Hello World nasıl yazılır?
Console.WriteLine("Hello, World!"); satırını bir sınıfın static void Main() metodunun içine koyun ve en üste using System; ekleyin. .NET 6 ve sonrasında dotnet new console ile oluşturulan bir projede dosyanın tamamı bu tek satır olabilir, çünkü top-level statements sınıfı ve Main'i sizin için üretir.
C#'ta Main metodu nedir?
Main giriş noktasıdır: program başladığında çalışma zamanının çağırdığı metot. static olmalıdır, void ya da int (çıkış kodu) döndürebilir ve komut satırı argümanlarını içeren bir string[] args parametresi alabilir. Bir programda tam olarak bir tane olmalıdır.
Console.Write ile Console.WriteLine arasındaki fark nedir?
Console.WriteLine metni yazar ve ardından bir satır sonu ekler, böylece sonraki çıktı yeni bir satırda başlar. Console.Write yalnızca metni yazar, sonraki çıktı aynı satırda devam eder. Argümansız Console.WriteLine() boş bir satır yazdırır.
C#'ta kullanıcı girdisi nasıl okunur?
Console.ReadLine() bir satır metin okur ve onu (satır sonu olmadan) string olarak döndürür; girdi kalmadığında null döndürür. Sayı elde etmek için string'i dönüştürün: int.TryParse(Console.ReadLine(), out int n) metin sayı değilse çökmek yerine false döndürür.
Bir C# programı komut satırından nasıl çalıştırılır?
.NET SDK'yı kurun, sonra proje oluşturmak için dotnet new console -o HelloApp, ardından cd HelloApp ve derleyip çalıştırmak için dotnet run çalıştırın. dotnet build yalnızca derler ve çıktıyı bin/Debug/net8.0/ (ya da hedeflediğiniz sürüm) klasörüne koyar.