C# dili turu
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, en azından işlevsel programlamayı içermez. 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.
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 edin. C# ayrıca çok satırlı açıklamaları da destekler. Çok satırlı açıklamalar ile /*
başlar ve ile */
biter. WriteLine
ad alanında System
olan sınıfının yöntemiConsole
, programın çıkışı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.
Yukarıdaki örnekte, üst düzey deyimler kullanılarak "Hello, World" programının bir biçimi gösterilmektedir. C# uygulamasının önceki sürümleri, programın giriş noktasını bir yöntemde tanımlamanızı gerektiriyor. Bu biçim hala geçerlidir ve bunu birçok mevcut C# örneğinde görürsünüz. Aşağıdaki örnekte gösterildiği gibi bu formu da biliyor olmalısınız:
using System;
class Hello
{
static void Main()
{
// This line prints "Hello, World"
Console.WriteLine("Hello, World");
}
}
Bu sürümde, programlarınızda kullandığınız yapı taşları gösterilir. "Hello, World" programı ad alanına başvuran System
bir using
yönergeyle 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 Collections
gibi IO
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önergesi using
nedeniyle, program için System.Console.WriteLine
kısaltma olarak kullanabilirConsole.WriteLine
. Önceki örnekte bu ad alanı örtük olarak eklenmiştir.
Hello
"Hello, World" programı tarafından bildirilen sınıfın adlı Main
yöntemi olan tek bir üyesi vardır. Main
yöntemi değiştirici ile static
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.
Her iki giriş noktası formu da eşdeğer kod üretir. Üst düzey deyimleri kullandığınızda, derleyici programın giriş noktası için içeren sınıfını ve yöntemini sentezler.
İpucu
Bu makaledeki örneklerde C# koduna ilk kez göz atabilirsiniz. Bazı örneklerde aşina olmadığınız C# öğeleri gösterilebilir. C# öğrenmeye hazır olduğunuzda başlangıç öğreticilerimizle başlayın veya her bölümdeki bağlantıları inceleyin. Java, JavaScript, TypeScript veya Python konusunda deneyimliyseniz C# dilini hızla öğrenmek için ihtiyacınız olan bilgileri bulmanıza yardımcı olacak 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# C diller ailesindedir. C, C++, JavaScript veya Java kullandıysanız C# söz dizimi tanıdıktır. C ailesindeki tüm diller gibi, noktalı virgül (;
) deyimlerin sonunu tanımlar. C# tanımlayıcıları büyük/küçük harfe duyarlıdır. C# ayraçları {
ve }
, ve gibi switch
else
if
denetim deyimlerini ve ve gibi for
while
döngü yapılarını aynı şekilde kullanır. C# ayrıca herhangi bir koleksiyon türü için bir foreach
deyimine sahiptir.
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: , double
, , char
gibi int
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 class
nesne odaklı davranışı tanımlayan türler olabilirstruct
. 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 class
türlerinin struct
üyeleri olarak yöntemler olarak da adlandırılan işlevleri 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 hakkında bilgi edineceksiniz. 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. 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. ve anahtar sözcüklerini kullanarak async
await
zaman uyumsuz yöntemleri tanımlar ve bir ifade zaman uyumsuz olarak değerlendirildiğinde kullanılır. Aşağıdaki örnek zaman uyumsuz 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 disk belleği API'si gibi zaman uyumsuz bir işlem tarafından desteklenen bir koleksiyonu yinelemek için bir deyimini de destekler await foreach
. 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
deyimi kullanarak koleksiyonu yineleyebilir:
await foreach (var number in ReadSequence())
{
Console.WriteLine(number);
}
C# desen eşleştirmesi 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 veya ve xor işlemlerinin yöntemlerinin 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 tümünü yakalama olarak kullanılarak _
basitleştirilebilir. Aşağıdaki örnekte ve yöntemini nasıl basitleştirebileceğiniz gösterilmektedir:
public static bool ReducedAnd(bool left, bool right) =>
(left, right) switch
{
(true, true) => true,
(_, _) => false,
};
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.