Aracılığıyla paylaş


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, 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 IOgibi 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ü thiskullanarak 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 Programolarak 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, , doublegibi chardeğer türleri , diziler ve diğer koleksiyonlar gibi stringbaş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 Studentstemsil 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.