Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ha új feladatot kezd, vagy egy C#-t használó csapathoz csatlakozik, ez a cikk segít a hatékony munkavégzésben. Kiemeli a Java és a C# újdonságait.
A C# és a Java számos hasonlósággal rendelkezik. A C# elsajátítása során a Java-beli programozásból már meglévő ismeretek nagy részét alkalmazhatja:
-
Hasonló szintaxis: A Java és a C# is a C nyelvcsaládban található. Ez a hasonlóság azt jelenti, hogy már olvashatja és megértheti a C#-t. Vannak különbségek, de a szintaxis nagy része ugyanaz, mint a Java és a C. A kapcsos zárójelek és pontosvesszők ismerősek. Az olyan vezérlő utasítások, mint
ifa ,elseswitchugyanazok. Afor,while, ésdo...whileismétlődő utasításai megegyeznek. Ugyanezek aclassinterfacekulcsszavak mindkét nyelven szerepelnek. A hozzáférési módosítókpublicprivateazonosak. Még sok beépített típus is ugyanazokat a kulcsszavakat használja:int,stringésdouble. - Objektumorientált paradigma: A Java és a C# is objektumorientált nyelv. A polimorfizmus, az absztrakció és a beágyazás fogalmai mindkét nyelven érvényesek. Mindkettő új szerkezeteket adott hozzá, de az alapvető funkciók továbbra is relevánsak.
- Erősen típusos: A Java és a C# is erősen típusos nyelv. A változók adattípusát explicit módon vagy implicit módon deklarálhatja. A fordító biztosítja a típusbiztonságot. A fordító a kód futtatása előtt észleli a típussal kapcsolatos hibákat a kódban.
- Platformfüggetlen: A Java és a C# egyaránt platformfüggetlen. A fejlesztői eszközöket a kedvenc platformján futtathatja. Az alkalmazás több platformon is futtatható. A fejlesztési platform nem szükséges a célplatformhoz való igazodáshoz.
-
Kivételkezelés: A Java és a C# kivételeket is ad a hibák jelzéséhez. Mindkettő blokkokat használ
try-catch-finallya kivételek kezelésére. A kivételosztályok neve és öröklési hierarchiája hasonló. Az egyik különbség az, hogy a C# nem rendelkezik az ellenőrzött kivételek fogalmával. Bármely módszer (elméletileg) kivételt jelenthet. - Standard kódtárak: A .NET-futtatókörnyezet és a Java Standard Könyvtár (JSL) támogatja a gyakori feladatokat. Mindkettő kiterjedt ökoszisztémákkal rendelkezik más nyílt forráskód csomagokhoz. A C#-ban a csomagkezelő NuGet. Ez a Mavenhez hasonló.
-
Szemétgyűjtés: Mindkét nyelv automatikus memóriakezelést alkalmaz szemétgyűjtéssel. A futtatókörnyezet visszaszerzi a memóriát a nem hivatkozott objektumokból. Az egyik különbség az, hogy a C# lehetővé teszi értéktípusok létrehozását típusként
struct.
Szintaxis egy pillantással
Az alábbi példák néhány gyakori mintát mutatnak egymás mellett. Ezek az összehasonlítások nem teljesek, de gyors áttekintést nyújtanak a szintaxisbeli különbségekről.
Változó deklarációja és típuskövetkeztetés:
// Java
var name = "Hello";
final int count = 5;
// C#
var name = "Hello";
const int count = 5;
Sztring-interpoláció:
// Java
var message = "Hello, " + name + "! Count: " + count;
// C#
var message = $"Hello, {name}! Count: {count}";
További információ: Karakterlánc interpoláció
Lambda-kifejezések:
// Java
list.stream().filter(x -> x > 5).collect(Collectors.toList());
// C#
var result = list.Where(x => x > 5).ToList();
További információ: A LINQ áttekintése
Null értékek kezelése:
// Java
String value = optional.orElse("default");
// C#
string value = input ?? "default";
További információ: Null értékű referenciatípusok
A megszokott dolgok
A hasonlóságok miatt a C#-ban szinte azonnal hatékonyan dolgozhat. A folyamat során megismerheti a Java-ban nem elérhető C# funkcióit és kifejezéseit:
-
Mintaegyezés: A mintaegyeztetés lehetővé teszi a feltételes utasítások és kifejezések tömör, összetett adatstruktúrákon alapuló használatát. Az
isutasítás ellenőrzi, hogy egy változó "is" típusú-e. A mintaalapúswitchkifejezés gazdag szintaxist biztosít a változók vizsgálatához és a jellemzői alapján történő döntéshozatalhoz. - Sztring interpolációja és nyers sztringkonstansok: A sztring interpolációja lehetővé teszi a kiértékelt kifejezések sztringbe való beszúrását a helyazonosítók használata helyett. A nyers sztringkonstansok lehetővé teszik a szövegben lévő feloldási sorozatok minimalizálását.
-
Null értékű és nem null értékű típusok: A C# támogatja a null értékű értéktípusokat, a null értékű referenciatípusokat pedig az
?utótag típushoz való hozzáfűzésével. Null értékű típusok esetén a fordító figyelmezteti, ha nem ellenőrzi, hogy null értékű-e a kifejezés, mielőtt használni próbálná azt. A nem nullázható típusok esetén a fordító figyelmezteti, ha esetleg egynullértéket rendelne hozzá ehhez a változóhoz. A nem null értékű referenciatípusok minimalizálják azokat a programozási hibákat, amelyek egy System.NullReferenceException-t eredményeznek. - Bővítmények: A C#-ban létrehozhat olyan tagokat, amelyek kiterjesztik az osztályt vagy a felületet. A bővítmények új viselkedést biztosítanak egy kódtárból származó típushoz, vagy minden olyan típushoz, amely egy adott felületet implementál.
- LINQ: A nyelvvel integrált lekérdezés (LINQ) az adatok lekérdezéséhez és átalakításához általános szintaxist biztosít, függetlenül azok tárterületétől.
- Helyi függvények: A C#-ban függvényeket ágyazhat be metódusokban vagy más helyi függvényekben. A helyi függvények a beágyazás újabb rétegét biztosítják.
Jótanács
Ha többet szeretne megtudni a C#típusrendszeréről (beleértve struct a vs. classrekordokat és a felületeket), tekintse meg a Típusrendszer áttekintését az Alapok szakaszban.
A C#-ban vannak olyan funkciók is, amelyek nem java nyelven érhetők el. Olyan funkciók, mint a async és a await, modellezik az aszinkron műveleteket szekvenciális szintaxisban. Az using utasítás automatikusan felszabadítja a nem memóriabeli erőforrásokat.
A C# és a Java között vannak olyan hasonló funkciók is, amelyek apró, de fontos különbségekkel rendelkeznek:
-
Tulajdonságok és indexelők: Mind a tulajdonságok, mind az indexelők (az osztályokat tömbként vagy szótárként kezelik) nyelvi támogatással rendelkeznek. A Java-ban a metódusok elnevezési konvenciói azzal kezdődnek, hogy
getésset. -
Rekordok: A C#-ban a rekordok lehetnek
class(hivatkozás) vagystruct(érték) típusúak. A C#-rekordok nem módosíthatók, de nem szükséges, hogy módosíthatók legyenek. - A tuple-ök különböző szintaxissal rendelkeznek a C#-ban és a Java-ban.
- Az attribútumok hasonlóak a Java-széljegyzetekhez.
Végül vannak olyan Java nyelvi funkciók, amelyek nem érhetők el a C#-ban:
- Ellenőrzött kivételek: A C#-ban bármely metódus elméletileg bármilyen kivételt okozhat.
- Ellenőrzött tömb kovariancia: A C#-ban a tömbök nem biztonságosan kovariánsak. Ha kovariantikus struktúrákra van szüksége, használja az általános gyűjteményosztályokat és interfészeket.
Általánosságban elmondható, hogy a Java-ban tapasztalt fejlesztők számára a C# tanulásának zökkenőmentesnek kell lennie. A C#-nak elég ismerős kifejezése van ahhoz, hogy hatékony legyen az új kifejezések elsajátítása során.
Következő lépések
- A C# bemutatása: Az összes C# funkció magas szintű áttekintése.
- Kezdő oktatóanyagok: A C# elsajátítása lépésről lépésre interaktív leckékkel.
- Mit hozhat létre a C#-tal? Ismerje meg a C#-tal létrehozható alkalmazástípusokat.
- C# alapismeretek: Ismerkedés a típusrendszerekkel, az objektumorientált programozással stb.