Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
C# en Java hebben veel overeenkomsten. Terwijl u C# leert, kunt u veel van de kennis toepassen die u al hebt van programmeren in Java:
-
Vergelijkbare syntaxis: Zowel Java als C# bevinden zich in de C-familie van talen. Deze overeenkomst betekent dat u C# al kunt lezen en begrijpen. Er zijn enkele verschillen, maar de meeste syntaxis is hetzelfde als Java en C. De accolades en puntkomma's zijn bekend. De besturingsinstructies zoals
if
,else
switch
zijn hetzelfde. De lusinstructies vanfor
,while
endo
...while
zijn hetzelfde. Dezelfde trefwoorden voorclass
eninterface
bevinden zich in beide talen. De toegangsmodificators vanpublic
totprivate
zijn hetzelfde. Zelfs veel van de ingebouwde typen gebruiken dezelfde trefwoorden:int
,string
endouble
. - Objectgeoriënteerd paradigma: Zowel Java als C# zijn objectgeoriënteerde talen. De concepten van polymorfisme, abstractie en inkapseling zijn in beide talen van toepassing. Beide nieuwe constructies zijn toegevoegd, maar de kernfuncties zijn nog steeds relevant.
- Sterk getypt: Zowel Java als C# zijn sterk getypte talen. U declareert het gegevenstype van variabelen, expliciet of impliciet. De compiler dwingt typeveiligheid af. De compiler onderschept typefouten in uw code voordat u de code uitvoert.
- Platformoverschrijdend: Zowel Java als C# zijn platformoverschrijdend. U kunt uw ontwikkelhulpprogramma's uitvoeren op uw favoriete platform. Uw toepassing kan worden uitgevoerd op meerdere platforms. Uw ontwikkelplatform is niet vereist om overeen te komen met uw doelplatform.
-
Uitzonderingsafhandeling: Zowel Java als C# genereren uitzonderingen om fouten aan te geven. Beide gebruiken
try
-catch
-finally
blokken om uitzonderingen af te handelen. De uitzonderingsklassen hebben vergelijkbare namen en overnamehiërarchieën. Een verschil is dat C# niet beschikt over het concept van gecontroleerde uitzonderingen. Elke methode kan (in theorie) elke uitzondering veroorzaken. - Standaardbibliotheken: De .NET-runtime en de Java Standard Library (JSL) bieden ondersteuning voor algemene taken. Beide hebben uitgebreide ecosystemen voor andere opensource-pakketten. In C# is de pakketbeheerder NuGet. Het is vergelijkbaar met Maven.
-
Garbagecollection: beide talen maken gebruik van automatisch geheugenbeheer via garbagecollection. De runtime maakt het geheugen vrij van objecten waarnaar niet wordt verwezen. Een verschil is dat u met C# waardetypen als
struct
-typen kunt maken.
U kunt bijna onmiddellijk productief werken in C# vanwege de overeenkomsten. Wanneer u verder gaat, moet u functies en idioms in C# leren die niet beschikbaar zijn in Java:
-
Patroonkoppeling: Patroonkoppeling maakt beknopte voorwaardelijke instructies en expressies mogelijk op basis van de vorm van complexe gegevensstructuren. De
is
instructie controleert of een variabele overeenkomt met een bepaald patroon. De op patronen gebaseerdeswitch
expressie biedt een uitgebreide syntaxis om een variabele te inspecteren en beslissingen te nemen op basis van de kenmerken ervan. - Tekenreeksinterpolatie en letterlijke tekenreeksen: met tekenreeksinterpolatie kunt u geëvalueerde expressies in een tekenreeks invoegen in plaats van positionele id's te gebruiken. Letterlijke onbewerkte tekenreeksen bieden een manier om escape-sequenties in tekst te minimaliseren.
-
Nullable en niet-nullable typen: C# ondersteunt nullable waardetypen en nullable verwijzingstypen door het
?
achtervoegsel toe te voegen aan een type. Voor nullable typen waarschuwt de compiler u als u niet controleert op null voordat u de expressie derefereert. Voor niet-null-typen waarschuwt de compiler u als u mogelijk eennull
waarde aan die variabele toewijst. Ontaanpasbare referentietypen verminderen programmeerfouten die een System.NullReferenceException veroorzaken. - Extensies: In C# kunt u leden maken die een klasse of interface uitbreiden . Extensies bieden nieuw gedrag voor een type uit een bibliotheek of alle typen die een bepaalde interface implementeren.
- LINQ: Language Integrated Query (LINQ) biedt een algemene syntaxis voor het opvragen en transformeren van gegevens, ongeacht de opslag.
- Lokale functies: In C# kunt u functies nesten binnen methoden of andere lokale functies. Lokale functies bieden nog een andere laag inkapseling.
Er zijn andere functies in C# die zich niet in Java bevinden. Functies zoals async
en await
modelleren asynchrone operaties met een sequentiële syntaxis. Met de using
-instructie worden niet-geheugenbronnen automatisch vrijgemaakt.
Er zijn ook enkele vergelijkbare functies tussen C# en Java die subtiele maar belangrijke verschillen hebben:
-
Eigenschappen en indexeerfuncties: zowel eigenschappen als indexeerfuncties (behandelen van een klasse zoals een matrix of woordenlijst) hebben taalondersteuning. In Java noemen ze naamconventies voor methoden die beginnen met
get
enset
. -
Records: In C# kunnen records typen
class
(verwijzing) ofstruct
(waarde) zijn. C#-records kunnen onveranderbaar zijn, maar hoeven niet onveranderbaar te zijn. - Tuples hebben verschillende syntaxis in C# en Java.
- Kenmerken zijn vergelijkbaar met Java-aantekeningen.
Ten slotte zijn er Java-taalfuncties die niet beschikbaar zijn in C#:
- Gecontroleerde uitzonderingen: in C# kan elke methode theoretisch elke uitzondering genereren.
- Gecontroleerde matrixcovariantie: in C# zijn matrices niet veilig covariant. U moet de algemene verzamelingsklassen en interfaces gebruiken als u covariantstructuren nodig hebt.
Over het algemeen moet het leren van C# voor een ontwikkelaar die ervaring heeft met Java soepel verlopen. C# heeft genoeg vertrouwde idiomen om productief te zijn terwijl u de nieuwe idiomen leert.