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, 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 Collectionsgibi 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.WriteLinekı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ı Mainyöntemi olan tek bir üyesi vardır. Main yöntemi değiştirici ile static 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.

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 switchelseifdenetim deyimlerini ve ve gibi forwhiledö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, , chargibi intdeğ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 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 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. ve anahtar sözcüklerini kullanarak asyncawait 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.