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ó this
haszná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 switch
a hurkos szerkezetek, például for
az , é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
, char
referenciatípusok, például string
tö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 Students
ké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.