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.
C# dili, ücretsiz, platformlar arası bir açık kaynak geliştirme ortamı olan .NET platformu için en popüler dildir. C# programları Nesnelerin İnterneti (IoT) cihazlarından buluta ve aradaki her yerde birçok farklı cihazda çalışabilir. Telefon, masaüstü ve dizüstü bilgisayar ve sunucular için uygulama yazabilirsiniz.
C# yüksek performanslı kod yazarken geliştiricileri üretken hale getiren platformlar arası genel amaçlı bir dildir. Milyonlarca geliştirici ile C# en popüler .NET dilidir. C# ekosistemde ve tüm .NET iş yüklerinde geniş destek sunar. Nesne odaklı ilkelere dayanarak, diğer paradigmalardan birçok özellik içerir, bunların arasında işlevsel programlama da bulunmaktadır. Düşük düzeyli özellikler, güvenli olmayan kod yazmadan yüksek verimli senaryoları destekler. .NET çalışma zamanı ve kitaplıklarının çoğu C# dilinde yazılır ve C# dilindeki ilerlemeler genellikle tüm .NET geliştiricilerine fayda sağlar.
C# C diller ailesindedir. C, C++, JavaScript, TypeScript veya Java kullandıysanız C# söz dizimi tanıdıktır. C ve C++ gibi, noktalı virgüller (;
) deyimlerin sonunu tanımlar. C# tanımlayıcıları büyük/küçük harfe duyarlıdır. C#, {
ve }
gibi ayraçlar ile if
, else
, switch
gibi denetim ifadelerini ve for
, while
gibi döngü yapılarını aynı şekilde kullanır. C# ayrıca herhangi bir koleksiyon türü için bir foreach
deyimine sahiptir.
Merhaba dünya
"Hello, World" programı geleneksel olarak programlama dilini tanıtmak için kullanılır. C# dilindedir:
// This line prints "Hello, World"
Console.WriteLine("Hello, World");
ile //
başlayan satır tek satırlı bir açıklamadır. C# tek satırlı açıklamalar //
ile başlar ve geçerli satırın sonuna kadar devam eder. C# ayrıca çok satırlı açıklamaları da destekler. Çok satırlı açıklamalar /*
ile başlar ve */
ile biter.
WriteLine
ad alanındaki Console
sınıfının System
yöntemi, programın çıktısını üretir. Bu sınıf, varsayılan olarak her C# programında otomatik olarak başvurulan standart sınıf kitaplıkları tarafından sağlanır. Başka bir program formu, programın giriş noktası için içeren sınıfını ve yöntemini bildirmenizi gerektirir. En üst düzey deyimleri kullandığınızda derleyici bu öğeleri sentezler.
Bu alternatif biçim hala geçerlidir ve tüm C# programlarındaki temel kavramların çoğunu içerir. Birçok mevcut C# örneği aşağıdaki eşdeğer biçimi kullanır:
using System;
namespace TourOfCsharp;
class Program
{
static void Main()
{
// This line prints "Hello, World"
Console.WriteLine("Hello, World");
}
}
Yukarıdaki "Hello, World" programı, using
ad alanına başvuran bir System
yönergesiyle başlar. Ad alanları, C# programlarını ve kitaplıklarını düzenlemek için hiyerarşik bir araç sağlar. Ad alanları türleri ve diğer ad alanlarını içerir; örneğin, System
ad alanı programda başvuruda bulunılan sınıf gibi Console
birçok tür ve ve IO
gibi Collections
diğer birçok ad alanını içerir.
using
Belirli bir ad alanına başvuran yönerge, bu ad alanının üyesi olan türlerin nitelenmemiş olarak kullanılmasını sağlar. Yönerge using
nedeniyle, program Console.WriteLine
'i, System.Console.WriteLine
için kısaltma olarak kullanabilir. Önceki örnekte bu ad alanı örtük olarak eklenmiştir.
"Hello, World" programı tarafından bildirilen Program
sınıfının Main
adlı, tek bir metot üyesi vardır.
Main
yöntemi static
değiştiricisiyle bildirilir. Örnek yöntemleri anahtar sözcüğünü this
kullanarak belirli bir kapsayan nesne örneğine başvurarken, statik yöntemler belirli bir nesneye başvurmadan çalışır. Kural gereği, en üst düzey deyimler olmadığında adlı Main
statik bir yöntem, bir C# programının giriş noktası olarak hizmet eder.
Main
yöntemini içeren sınıf genellikle Program
olarak adlandırılır.
İpucu
Bu makaledeki örneklerde C# koduna ilk kez göz atabilirsiniz. Bazı örnekler, bilmediğiniz C# öğelerini gösterebilir. C# öğrenmeye hazır olduğunuzda başlangıç öğreticilerimizle başlayın veya her bölümdeki bağlantıları inceleyin. Java, JavaScript, TypeScriptveya Pythonkonusunda deneyimliyseniz, C# dilini hızla öğrenmek için ihtiyacınız olan bilgileri bulmanıza yardımcı olmak için ipuçlarımızı okuyun.
Tanıdık C# özellikleri
C# yeni başlayanlar için ulaşılabilir ancak özel uygulamalar yazan deneyimli geliştiriciler için gelişmiş özellikler sunar. Hızlı bir şekilde üretken olabilirsiniz. Uygulamalarınız için ihtiyacınız olduğu için daha özel teknikler öğrenebilirsiniz.
C# uygulamaları .NET Çalışma Zamanı'nın otomatik bellek yönetiminden yararlanan uygulamalardır. C# uygulamaları ayrıca .NET SDK tarafından sağlanan kapsamlı çalışma zamanı kitaplıklarını da kullanır. Dosya sistemi kitaplıkları, veri koleksiyonları ve matematik kitaplıkları gibi bazı bileşenler platformdan bağımsızdır. Diğerleri, ASP.NET Core web kitaplıkları veya .NET MAUI kullanıcı arabirimi kitaplığı gibi tek bir iş yüküne özeldir. NuGet'te zengin bir Açık Kaynak ekosistemi, çalışma zamanının parçası olan kitaplıkları genişletir. Bu kitaplıklar kullanabileceğiniz daha da fazla bileşen sağlar.
C# kesin olarak yazılan bir dildir. Bildirdiğiniz her değişkenin derleme zamanında bilinen bir türü vardır. Derleyici veya düzenleme araçları, bu türü yanlış kullanıp kullanmadığınızı size bildirir. Programınızı çalıştırmadan önce bu hataları düzeltebilirsiniz.
Temel veri türleri, dil ve çalışma zamanında yerleşik olarak bulunur: , int
, , double
gibi char
değer türleri , diziler ve diğer koleksiyonlar gibi string
başvuru türleri. Programlarınızı yazarken kendi türlerinizi oluşturursunuz. Bu türler değerler için türler veya struct
nesne odaklı davranışı tanımlayan türler olabilirclass
. Derleyicinin record
eşitlik karşılaştırmaları için kodu sentezlemesi için değiştiriciyi struct
veya class
türlerine ekleyebilirsiniz. Ayrıca, bu arabirimi uygulayan bir türün sağlaması gereken bir sözleşmeyi veya bir üye kümesini tanımlayan tanımlar da oluşturabilirsiniz interface
. Genel türler ve yöntemler de tanımlayabilirsiniz.
Genel değerler, kullanıldığında gerçek bir tür için yer tutucu sağlamak üzere tür parametrelerini kullanır.
Kod yazarken, ve struct
türlerinin üyeleri olarak yöntemler olarak da adlandırılan class
tanımlarsınız. Bu yöntemler türlerinizin davranışını tanımlar. Yöntemler, farklı sayıda veya parametre türüyle aşırı yüklenebilir. Yöntemler isteğe bağlı olarak bir değer döndürebilir. Yöntemlere ek olarak, C# türleri, erişimci olarak adlandırılan işlevler tarafından desteklenen veri öğeleri olan özelliklere sahip olabilir. C# türleri, bir türün abonelere önemli eylemleri bildirmesini sağlayan olayları tanımlayabilir. C# türlerde devralma ve polimorfizm class
gibi nesne odaklı teknikleri destekler.
C# uygulamaları hataları bildirmek ve işlemek için özel durumlar kullanır. C++ veya Java kullandıysanız bu uygulama tanıdıktır. Kodunuz amaçlananı gerçekleştiremiyorsa bir özel durum oluşturur. Çağrı yığınında kaç düzey yukarı olursa olsun diğer kodlar isteğe bağlı olarak bir try
- catch
blok kullanarak kurtarılabilir.
Ayırt edici C# özellikleri
C# öğesinin bazı öğeleri daha az tanıdık gelebilir.
C# desen eşleştirme sağlar. Bu ifadeler, verileri incelemenize ve özelliklerine göre karar vermenizi sağlar. Desen eşleştirme, verilere dayalı denetim akışı için harika bir söz dizimi sağlar. Aşağıdaki kod, boole ve, veya ve xor işlemleri için yöntemlerin desen eşleştirme söz dizimi kullanılarak nasıl ifade edilebileceğini gösterir.
public static bool Or(bool left, bool right) =>
(left, right) switch
{
(true, true) => true,
(true, false) => true,
(false, true) => true,
(false, false) => false,
};
public static bool And(bool left, bool right) =>
(left, right) switch
{
(true, true) => true,
(true, false) => false,
(false, true) => false,
(false, false) => false,
};
public static bool Xor(bool left, bool right) =>
(left, right) switch
{
(true, true) => false,
(true, false) => true,
(false, true) => true,
(false, false) => false,
};
Desen eşleştirme ifadeleri, herhangi bir değer için genel bir durum olarak _
kullanılarak basitleştirilebilir. Aşağıdaki örnek, ve yöntemini nasıl basitleştirebileceğinizi gösterir.
public static bool ReducedAnd(bool left, bool right) =>
(left, right) switch
{
(true, true) => true,
(_, _) => false,
};
Önceki örnekler, basit veri yapıları olan demetlerinide tanımlamaktadır.
tanımlama grubu, isteğe bağlı adlara ve tek tek türlere sahip sıralı, sabit uzunlukta bir değer dizisidir. Diziyi (
ve )
karakterleri içine alırsınız. bildirim (left, right)
iki boolean değeri olan bir tanımlama grubu tanımlar: left
ve right
. Her anahtar kolu (true, true)
gibi bir demet değeri bildirir. Tuple'lar, birden çok değeri içeren tek bir değeri bildirmek için kullanışlı sözdizimi sağlar.
Koleksiyon ifadeleri koleksiyon değerleri sağlamak için ortak bir söz dizimi sağlar.
[
ve ]
karakterler arasında değerler veya ifadeler yazarsınız ve derleyici bu ifadeyi gerekli koleksiyon türüne dönüştürür:
int[] numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
List<string> names = ["Alice", "Bob", "Charlie", "David"];
IEnumerable<int> moreNumbers = [.. numbers, 11, 12, 13];
IEnumerable<string> empty = [];
Önceki örnekte koleksiyon ifadeleri kullanılarak başlatılabilir farklı koleksiyon türleri gösterilmektedir. Bir örnek, boş bir koleksiyon bildirmek için boş []
koleksiyon ifadesini kullanır. Başka bir örnek, bir koleksiyonu genişletmek ve koleksiyon ifadesine tüm değerlerini eklemek için ..
spread öğesini kullanır.
Dizinlenebilir bir koleksiyondan bir veya daha fazla öğeyi almak için dizin ve aralığı ifadelerini kullanabilirsiniz:
string second = names[1]; // 0-based index
string last = names[^1]; // ^1 is the last element
int[] smallNumbers = numbers[0..5]; // 0 to 4
^
dizini, başlangıçtan değil, sonundan gösterir.
^0
öğesi koleksiyonun sonunu geçmiştir, bu nedenle ^1
son öğedir. Aralık ifadesindeki ..
, eklenecek öğe aralığını belirtir. Aralık, ilk dizinle başlar ve son dizindeki öğeyi hariç tutarak buraya kadar olan tüm öğeleri içerir.
Dil tümleşik sorgusu (LINQ), herhangi bir veri koleksiyonunu sorgulamak veya dönüştürmek için ortak bir desen tabanlı söz dizimi sağlar. LINQ, bellek içi koleksiyonları, XML veya JSON gibi yapılandırılmış verileri, veritabanı depolama alanını ve hatta bulut tabanlı veri API'lerini sorgulama söz dizimini birleştirilir. Tek bir söz dizimi kümesi öğrenirsiniz ve depolama alanına bakılmaksızın verileri arayabilir ve işleyebilirsiniz. Aşağıdaki sorgu, not noktası ortalaması 3,5'ten büyük olan tüm öğrencileri bulur:
var honorRoll = from student in Students
where student.GPA > 3.5
select student;
Yukarıdaki sorgu tarafından Students
temsil edilen birçok depolama türü için çalışır. Nesne koleksiyonu, veritabanı tablosu, bulut depolama blobu veya XML yapısı olabilir. Aynı sorgu söz dizimi tüm depolama türlerinde çalışır.
Görev tabanlı zaman uyumsuz programlama modeli, zaman uyumsuz olarak çalışıyor olsa bile zaman uyumlu olarak çalışıyormuş gibi okuyan kod yazmanızı sağlar.
async
ve await
anahtar sözcüklerini kullanarak zaman uyumsuz yöntemleri tanımlar ve bir ifade zaman uyumsuz olarak değerlendirildiğinde de kullanır. Aşağıdaki örnek eş zamansız bir web isteği bekler. Zaman uyumsuz işlem tamamlandığında, yöntemi yanıtın uzunluğunu döndürür:
public static async Task<int> GetPageLengthAsync(string endpoint)
{
var client = new HttpClient();
var uri = new Uri(endpoint);
byte[] content = await client.GetByteArrayAsync(uri);
return content.Length;
}
C# ayrıca GraphQL sayfalama API'si gibi zaman uyumsuz bir işlem tarafından desteklenen bir koleksiyon üzerinde yinelenebilir await foreach
bir deyimini de destekler. Aşağıdaki örnek öbekler halinde verileri okur ve kullanılabilir olduğunda her öğeye erişim sağlayan bir yineleyici döndürür:
public static async IAsyncEnumerable<int> ReadSequence()
{
int index = 0;
while (index < 100)
{
int[] nextChunk = await GetNextChunk(index);
if (nextChunk.Length == 0)
{
yield break;
}
foreach (var item in nextChunk)
{
yield return item;
}
index++;
}
}
Çağıranlar bir await foreach
ifadesi kullanarak koleksiyonu yineleyebilir.
await foreach (var number in ReadSequence())
{
Console.WriteLine(number);
}
Son olarak, .NET ekosisteminin bir parçası olarak, C# DevKit ile Visual Studio veya Visual Studio Code kullanabilirsiniz. Bu araçlar, yazdığınız kod da dahil olmak üzere C# hakkında zengin bir anlayış sağlar. Ayrıca hata ayıklama özellikleri de sağlar.