Share via


A C# nyelv bemutatása

A C# nyelv a .NET platform legnépszerűbb nyelve, egy ingyenes, platformfüggetlen, nyílt forráskód fejlesztési környezet. A C#-programok számos különböző eszközön futtathatók, az IoT-eszközöktől kezdve a felhőig és mindenhol a kettő között. Alkalmazásokat írhat telefonhoz, asztali számítógéphez, laptophoz és kiszolgálóhoz.

A C# egy platformfüggetlen általános célú nyelv, amely hatékonyabbá teszi a fejlesztőket, miközben nagy teljesítményű kódot írnak. Több millió fejlesztővel a C# a legnépszerűbb .NET-nyelv. A C# széles körű támogatást nyújt az ökoszisztémában és az összes .NET-számítási feladatban. Az objektumorientált alapelveken alapuló, más paradigmák számos funkcióját tartalmazza, nem utolsósorban a funkcionális programozást. Az alacsony szintű funkciók nem biztonságos kód írása nélkül támogatják a nagy hatékonyságú forgatókönyveket. A .NET-futtatókörnyezetek és a kódtárak többsége C#-ban van megírva, és a C# fejlesztései gyakran minden .NET-fejlesztő számára hasznosak.

Hello world

A "Hello, World" program hagyományosan egy programozási nyelv bevezetésére szolgál. Itt van a C#- ban:

// This line prints "Hello, World" 
Console.WriteLine("Hello, World");

A kezdő sor // egyetlen sor megjegyzése. A C# egysoros megjegyzései az aktuális sor végével // kezdődnek és folytatódnak. A C# támogatja a többsoros megjegyzéseket is. A többsoros megjegyzések a kezdő és a záró szöveggel kezdődnek /**/. A WriteLine névtérben található System osztály metódusa Console a program kimenetét hozza létre. Ezt az osztályt a standard osztálykódtárak biztosítják, amelyekre alapértelmezés szerint minden C# program automatikusan hivatkozik.

Az előző példa a "Hello, World" program egyik formáját mutatja be legfelső szintű utasítások használatával. A C# korábbi verzióiban meg kellett határoznia a program belépési pontját egy metódusban. Ez a formátum továbbra is érvényes, és számos meglévő C#-mintában fogja látni. Ezt az űrlapot is ismernie kell, ahogy az alábbi példában is látható:

using System;

class Hello
{
    static void Main()
    {
        // This line prints "Hello, World" 
        Console.WriteLine("Hello, World");
    }
}

Ez a verzió a programokban használt építőelemeket jeleníti meg. A "Hello, World" program a using névtérre hivatkozó System irányelvvel kezdődik. A névterek hierarchikus módon szervezik a C#-programokat és -kódtárakat. A névterek típusokat és egyéb névtereket tartalmaznak– például a System névtér számos típust tartalmaz, például a Console programban hivatkozott osztályt és sok más névteret, például IO és Collections. Egy using adott névtérre hivatkozó irányelv lehetővé teszi az adott névtér tagjai által használt típusok korlátlan használatát. Az irányelv miatt a using program rövidítésként használható Console.WriteLine a System.Console.WriteLine. A korábbi példában ez a névtér implicit módon szerepelt.

A Hello "Hello, World" program által deklarált osztálynak egyetlen tagja van, a metódus neve Main. A Main metódus deklarálása a static módosítóval történik. Míg a példánymetódusok a kulcsszó thishasználatával hivatkozhatnak egy adott objektumpéldányra, a statikus metódusok egy adott objektumra való hivatkozás nélkül működnek. Konvenció szerint, ha nincsenek legfelső szintű utasítások, a C#-program belépési pontjaként egy statikus metódus neve Main szolgál.

Mindkét belépésipont-űrlap egyenértékű kódot állít elő. Felső szintű utasítások használatakor a fordító szintetizálja a program belépési pontjának tartalmazó osztályát és metódusát.

Tipp.

A cikkben szereplő példák első pillantást engednek a C#-kódra. Egyes minták olyan C# elemeket mutathatnak, amelyeket nem ismer. Ha készen áll a C# elsajátítására, kezdje a kezdő oktatóanyagokkal, vagy ismerkedjen meg az egyes szakaszok hivatkozásaival. Ha járt már Java, JavaScript, TypeScript vagy Python nyelven, olvassa el tippjeinket, amelyek segítenek megtalálni a C# gyors elsajátításához szükséges információkat.

Ismerős C# funkciók

A C# kezdők számára elérhető, de speciális alkalmazásokat író tapasztalt fejlesztőknek nyújt speciális funkciókat. Gyorsan hatékonyan dolgozhat. Az alkalmazásokhoz szükséges speciális technikákat is megismerheti.

A C#-alkalmazások kihasználják a .NET-futtatókörnyezet automatikus memóriakezelését. A C#-alkalmazások a .NET SDK által biztosított széles körű futtatókörnyezeti kódtárakat is használják. Egyes összetevők platformfüggetlenek, például fájlrendszertárak, adatgyűjtemények és matematikai kódtárak. Mások egyetlen számítási feladatra vonatkoznak, például a ASP.NET Core webes kódtárakra vagy a .NET MAUI felhasználói felületi kódtárra. A NuGet gazdag nyílt forráskódú ökoszisztémája kibővíti a futtatókörnyezet részét képező kódtárakat. Ezek a kódtárak még több használható összetevőt biztosítanak.

A C# a C nyelvcsaládban található. A C#-szintaxis akkor ismert, ha C, C++, JavaScript vagy Java elemet használt. A C család összes nyelvéhez hasonlóan a pontosvesszők (;) határozzák meg az utasítások végét. A C#-azonosítók megkülönböztetik a kis- és nagybetűket. A C# ugyanúgy használja a kapcsos zárójeleket, { és }az olyan vezérlő utasításokat, mint az if, else és switcha hurkos szerkezetek, például foraz , és while. A C# bármilyen gyűjteménytípushoz rendelkezik foreach utasítással.

A C# egy erősen gépelt nyelv. Minden deklarált változónak van egy fordítási időpontban ismert típusa. A fordító vagy a szerkesztőeszközök közlik, hogy helytelenül használja-e ezt a típust. Ezeket a hibákat még a program futtatása előtt kijavíthatja. Az alapvető adattípusok a nyelvbe és a futtatókörnyezetbe vannak beépítve: értéktípusok, például int, double, charreferenciatípusok, például stringtömbök és egyéb gyűjtemények. A programok írásakor saját típusok hozhatók létre. Ezek a típusok lehetnek struct értéktípusok, vagy class objektumorientált viselkedést meghatározó típusok. Hozzáadhatja a record módosítót bármelyikhez struct vagy class típushoz, hogy a fordító szintetizálja a kódot az egyenlőségi összehasonlításokhoz. Olyan definíciókat is létrehozhat interface , amelyek meghatároznak egy szerződést vagy egy tagcsoportot, amelyet az interfészt megvalósító típusnak meg kell adnia. Általános típusokat és metódusokat is definiálhat. Az általánosaktípusparaméterekkel biztosítják a tényleges típus helyőrzőit használat esetén.

Kód írásakor függvényeket, más néven metódusokat határoz meg tagokként struct és class típusokként. Ezek a módszerek határozzák meg a típusok viselkedését. A metódusok túlterhelhetők különböző számú vagy típusú paraméterekkel. A metódusok opcionálisan visszaadhatnak egy értéket. A metódusok mellett a C#-típusok tulajdonságokat is tartalmazhatnak, amelyek a függvények, úgynevezett tartozékok által támogatott adatelemek. A C#-típusok meghatározhatnak eseményeket, amelyek lehetővé teszik, hogy egy típus értesítse az előfizetőket a fontos műveletekről. A C# támogatja az objektumorientált technikákat, például az öröklést és a polimorfizmust a típusok esetében class .

A C#-alkalmazások kivételeket használnak a hibák jelentésére és kezelésére. A C++ vagy a Java használata esetén ez a gyakorlat már ismerős lesz. A kód kivételt jelez, ha nem tudja megtenni a kívánt célt. Más kód, függetlenül attól, hogy hány szinttel feljebb van a hívásverem, blokk használatával try - catch is helyreállítható.

Megkülönböztető C# funkciók

Előfordulhat, hogy a C# egyes elemei kevésbé ismerősek. A nyelvvel integrált lekérdezés (LINQ) egy gyakori, mintaalapú szintaxist biztosít az adatgyűjtemények lekérdezéséhez vagy átalakításához. A LINQ egyesíti a memóriabeli gyűjtemények, strukturált adatok, például XML vagy JSON, adatbázis-tároló és akár felhőalapú adat API-k lekérdezésének szintaxisát. Megtanulhat egy szintaxiskészletet, és tárterülettől függetlenül kereshet és kezelhet adatokat. Az alábbi lekérdezés az összes tanulót megkeresi, akiknek az osztályzati átlaga nagyobb, mint 3,5:

var honorRoll = from student in Students
                where student.GPA > 3.5
                select student;

Az előző lekérdezés számos, az általuk Studentsképviselt tárolási típus esetében működik. Ez lehet objektumgyűjtemény, adatbázistábla, felhőalapú tárolóblob vagy XML-struktúra. Ugyanez a lekérdezésszintaxis minden tártípus esetében működik.

A feladatalapú aszinkron programozási modell lehetővé teszi olyan kód írását, amely szinkron módon fut, annak ellenére, hogy aszinkron módon fut. Az aszinkron metódusokat és await a async kulcsszavakat használja az aszinkron metódusok leírására, és amikor egy kifejezés aszinkron módon kiértékeli azokat. Az alábbi minta egy aszinkron webes kérésre vár. Az aszinkron művelet befejeződésekor a metódus a válasz hosszát adja vissza:

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;
}

A C# támogatja azt az utasítást await foreach is, amely egy aszinkron művelettel támogatott gyűjteményt iterál, például egy GraphQL lapozó API-t. Az alábbi minta adattömbökben olvassa be az adatokat, és visszaad egy iterátort, amely hozzáférést biztosít az egyes elemekhez, ha elérhetők:

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 hívók egy utasítással iterálhatják a gyűjteményt await foreach :

await foreach (var number in ReadSequence())
{
    Console.WriteLine(number);
}

A C# mintaegyezést biztosít. Ezek a kifejezések lehetővé teszik az adatok vizsgálatát és azok jellemzői alapján történő döntéshozatalt. A mintaegyeztetés nagyszerű szintaxist biztosít az adatokon alapuló vezérlési folyamatokhoz. Az alábbi kód bemutatja, hogyan fejezhetők ki a logikai és xor műveletek metódusai a mintaegyező szintaxis használatával:

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,
    };

A mintaegyeztetési kifejezések egyszerűsödhetnek, ha minden értéknél fogásként használják _ . Az alábbi példa bemutatja, hogyan egyszerűsítheti le a módszert:

public static bool ReducedAnd(bool left, bool right) =>
    (left, right) switch
    {
        (true, true) => true,
        (_, _) => false,
    };

Végül a .NET-ökoszisztéma részeként használhatja a Visual Studiót vagy a Visual Studio Code-ot a C# DevKittel. Ezek az eszközök részletes ismereteket nyújtanak a C#-ról, beleértve az ön által írt kódot is. Hibakeresési képességeket is biztosítanak.