Megosztás a következőn keresztül:


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.

A C# a C nyelvcsaládban található. A C#-szintaxis ismerős lesz, ha C, C++, JavaScript, TypeScript vagy Java nyelvet használta. A C és a C++ függvényhez 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.

Helló világ

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ó Console osztály metódusa System 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. Egy másik programűrlapon deklarálnia kell a program belépési pontjának tartalmazó osztályát és metódusát. A fordító, amikor legfelső szintű utasításokat használunk, szintetizálja ezeket az elemeket.

Ez az alternatív formátum továbbra is érvényes, és az összes C#-program alapfogalmait tartalmazza. Számos meglévő C#-minta a következő formátumot használja:

using System;
namespace TourOfCsharp;

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

Az előző "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 Program "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 Main egy statikus metódus neve szolgál. A metódust tartalmazó Main osztály neve általában Program.

Tipp.

A cikkben szereplő példák első pillantást engednek a C#-kódra. Egyes minták olyan C# elemeket mutathatnak, amelyeket nem ismerhet. 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.

Fájlalapú programok

A C# egy lefordított nyelv. A legtöbb C#-programban a dotnet build parancs használatával lefordíthat egy forrásfájlcsoportot bináris csomagba. Ezután a dotnet run parancs használatával futtathatja a programot. (Egyszerűsítheti ezt a folyamatot, mert dotnet run szükség esetén a program futtatása előtt lefordítja a programot.) Ezek az eszközök a konfigurációs beállítások és a parancssori kapcsolók gazdag nyelvét támogatják. A dotnet .NET SDK-ban található parancssori felület (CLI) számos eszközt biztosít a C#-fájlok létrehozásához és módosításához.

A C# 14-től és a .NET 10-től kezdve létrehozhat fájlalapú programokat, amelyek leegyszerűsítik a C# programok létrehozását és futtatását. A parancs használatával dotnet run egyetlen *.cs fájlban található programot futtathat. Ha például a következő kód egy nevesített hello-world.csfájlban van tárolva, a következő beírással dotnet run hello-world.csfuttathatja:

#!/usr/local/share/dotnet/dotnet run
Console.WriteLine("Hello, World!");

A program első sora tartalmazza a #! szekvenciát a unix shell-ekhez. A parancssori felület dotnet helye különböző disztribúcióktól függően változhat. Bármely unix rendszeren, ha egy C# fájl végrehajtási (+x) engedélyét állítja be, a parancssorból futtathatja a C# fájlt:

./hello-world.cs

Ezeknek a programoknak a forrásának egyetlen fájlnak kell lennie, de ellenkező esetben az összes C# szintaxis érvényes. Használhat fájlalapú programokat kis parancssori segédprogramokhoz, prototípusokhoz vagy más kísérletekhez.

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# 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. Ez a gyakorlat akkor ismert, ha C++ vagy Java verziót használt. 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 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,
    };

Az előző példák emellett deklarálják a tuplákat, amelyek egyszerű adatstruktúrák. A tuple az értékek rendezett, rögzített hosszúságú sorozata opcionális névvel és egyéni típusokkal. A sorozatot a ( és ) karakterek közé helyezi. A deklaráció (left, right) két logikai értékkel definiál egy párt: left és right. Minden kapcsolókar egy tupel értéket deklarál, például (true, true). A tuples kényelmes szintaxist biztosít egyetlen érték deklarálásához több értékkel.

A gyűjteménykifejezések gyakori szintaxist biztosítanak a gyűjteményértékek megadásához. Értékeket vagy kifejezéseket ír a [ és ] karakterek közé, és a fordító azt a szükséges gyűjteménytípusra alakítja.

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 = [];

Az előző példában különböző gyűjteménytípusok láthatók, amelyek gyűjteménykifejezésekkel inicializálhatók. Egy példa az [] üres gyűjtemény kifejezéssel deklarál egy üres gyűjteményt. Egy másik példa a .. használja egy gyűjtemény kibontására, hogy az összes értékét hozzáadja a gyűjteménykifejezéshez.

Index- és tartománykifejezésekkel lekérhet egy vagy több elemet egy indexelhető gyűjteményből:

string second = names[1]; // 0-based index
string last = names[^1]; // ^1 is the last element
int[] smallNumbers = numbers[0..5]; // 0 to 4

Az ^ index az végétől jelzi, nem az elejétől. Az ^0 elem a gyűjtemény végén található, így ^1 az utolsó elem is. A .. tartományban lévő kifejezés a belefoglalandó elemek tartományát jelöli. A tartomány az első indexkel kezdődik, és az összes elemet tartalmazza az utolsó indexben lévő elemig, de nem tartalmazza azt.

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 async a await 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);
}

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.