Share via


Roadmap voor Java-ontwikkelaars die C leren#

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:

  1. 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, elseswitch zijn hetzelfde. De lusinstructies van for, whileen do...while zijn hetzelfde. Dezelfde trefwoorden voor class en interface bevinden zich in beide talen. De toegangsaanpassingen van public tot nu private zijn hetzelfde. Zelfs veel van de ingebouwde typen gebruiken dezelfde trefwoorden: int, stringen double.
  2. 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.
  3. 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.
  4. 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.
  5. Uitzonderingsafhandeling: Zowel Java als C# genereren uitzonderingen om fouten aan te geven. Beide gebruiken try - - catchfinally 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.
  6. 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.
  7. 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 struct als typen kunt maken.

U bent vrijwel onmiddellijk productief in C# vanwege de overeenkomsten. Wanneer u verder gaat, moet u functies en idioms in C# leren die niet beschikbaar zijn in Java:

  1. Patroonkoppeling: Patroonkoppeling maakt beknopte voorwaardelijke instructies en expressies mogelijk op basis van de vorm van complexe gegevensstructuren. De is instructie controleert of een variabele 'is' een bepaald patroon heeft. De op patronen gebaseerde switch expressie biedt een uitgebreide syntaxis om een variabele te inspecteren en beslissingen te nemen op basis van de kenmerken ervan.
  2. Tekenreeksinterpolatie en letterlijke tekenreeksen: met tekenreeksinterpolatie kunt u geëvalueerde expressies in een tekenreeks invoegen in plaats van positionele id's te gebruiken. Letterlijke tekenreeksen van onbewerkte tekenreeksen bieden een manier om escapereeksen in tekst te minimaliseren.
  3. Nullable en niet-nullable typen: C# ondersteunt nullable waardetypen en nullable verwijzingstypen door het ? achtervoegsel toe te voegen aan een type. Voor null-typen waarschuwt de compiler u als u niet controleert null voordat u de expressie opnieuw uitstellen. Voor niet-null-typen waarschuwt de compiler u als u mogelijk een null waarde aan die variabele toewijst. Niet-null-referentietypen minimaliseren programmeerfouten die een System.NullReferenceException.
  4. Extensiemethoden: in C# kunt u methoden maken waarmee een klasse of interface wordt uitgebreid . Uitbreidingsmethoden breiden het gedrag van een type uit een bibliotheek of alle typen die een bepaalde interface implementeren.
  5. LINQ: Language Integrated Query (LINQ) biedt een algemene syntaxis voor het opvragen en transformeren van gegevens, ongeacht de opslag.
  6. Lokale functies: In C# kunt u functies in methoden of andere lokale functies nesten. Lokale functies bieden nog een andere laag inkapseling.

Er zijn andere functies in C# die zich niet in Java bevinden. U ziet functies zoals async en awaitinstructies using voor het automatisch vrij maken van niet-mory resources.

Er zijn ook enkele vergelijkbare functies tussen C# en Java die subtiele maar belangrijke verschillen hebben:

  1. 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 en set.
  2. Records: In C# kunnen records typen class (verwijzing) of struct (waarde) zijn. C#-records kunnen onveranderbaar zijn, maar hoeven niet onveranderbaar te zijn.
  3. Tuples hebben verschillende syntaxis in C# en Java.
  4. Kenmerken zijn vergelijkbaar met Java-aantekeningen.

Ten slotte zijn er Java-taalfuncties die niet beschikbaar zijn in C#:

  1. Gecontroleerde uitzonderingen: in C# kan elke methode theoretisch elke uitzondering genereren.
  2. 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. U vindt genoeg bekende idiomen om snel productief te zijn en u leert de nieuwe idiomen snel.