Kommentarer
- Som skrivet var frågan ett läroboksexempel på inte konstruktivt " vilket språk är bättre? " frågor som inte är ämnen här. Jag ' har försökt göra det mer konstruktivt med en redigering eftersom det faktiskt fick bra, väl genomtänkta svar. Tänk dock på FAQ och detta blogginlägg när du ställer frågor av den här typen .
- Låt mig lägga till några snyggare saker. .NET har en väldefinierad DOM ( t.ex. CodeDOM ) för sitt språk och att generera saker dynamiskt vid körning är därför mycket enklare och effektivare. Detta kan också vara till hjälp som en infrastrukturell kapacitet. Dessutom har typsystemet en 1-till-1-matchning med alla inbyggda W3-typer. I grunden bakades W3 och andra interops in i språket från början. För andra språk var dessa bekymmer bara påskruvade och medför många utmaningar för dem. Dessutom, om du ' kommer att samverka med många språk och / eller protokoll så är .NET också mycket stark
- Hej, JoeGeeky, lägg till din kommentar som ett svar på frågan.
- De verkliga frågorna är: Av vilka skäl ska jag välja Nemerle, F * och F # framför C #? (dvs. alla tre språken är från MS och alla tre är bättre)
- Jag tänker verkligen inte ' tänker på något uttalande av genren " språk / plattform X jämfört med språk / plattform Y är ALLTID bättre " är giltigt och jag tror också att det för alla X och Y lätt kan ogiltigförklaras för vissa sammanhang. Vad ' är poängen med denna fråga?
Svar
Frågan ska vara " Vilket språk passar bättre för modern, typisk applikationsutveckling? ".
Redigera : Jag tog upp några av kommentarerna nedan. En liten anmärkning: tänk på att när du har många saker naturligt, som idiom, är det en stor skillnad än att implementera eller ladda ner och använda dem själv varje gång. Nästan allt kan implementeras på något av dessa språk. Frågan är – vad Språken ger dig inbyggt.
Så från toppen av mitt huvud (vissa argument gäller för båda språken) …
C # är bättre än C ++ genom att:
- Den har inbyggd sopsamling.
- Det gör att du kan behandla klassmetoder ”-signaturer som fria funktioner (dvs. ignorera den statiskt skrivna
this
pekargument), och därmed skapa mer dynamiska och flexibla relationer mellan klasser. redigera om du inte vet vad det betyder, försök sedan tilldela en medlemsmetod som returnerar ogiltig och accepterar ogiltighet till envoid (*ptr)()
variabel. C # delegater harthis
pekaren med sig, men användaren behöver inte alltid bry sig om det. De kan bara tilldela envoid()
-metod för vilken klass som helst till någon annanvoid()
-delegat. - Den har en enorm standard bibliotek med så mycket användbara saker som är väl implementerade och lätta att använda.
- Det möjliggör både hanterade och inbyggda kodblock.
- Versionsversion av monteringen avhjälper enkelt DLL-helvetsproblem.
- Du kan ställa in klasser, metoder och fält för att vara monteringsinternt (vilket innebär att de är tillgängliga var som helst inom den DLL de deklareras i, men inte från andra sammansättningar).
C # är bättre än Java genom att:
- Istället för mycket brus (EJB, privata statiska klassimplementeringar, etc) får du eleganta och vänliga inbyggda konstruktioner som Egenskaper och händelser .
- Du har riktiga generics (inte det dåliga casting-skämtet som Java kallar generics), och du kan reflektera över dem.
- Det stöder inhemska resurshanteringsidiomer (
using
uttalande). Java 7 kommer också att stödja detta, men C # har haft det en längre tid. - Det har inte kontrollerat undantag 🙂 (diskutabelt om det här är bra eller dåligt)
- Det är djupt integrerat med Windows, om det är vad du vill ha.
- Det har Lambdas och LINQ, och stöder därför en liten mängd funktionell programmering.
- Det möjliggör både generisk kovarians och kontravarians uttryckligen.
- Den har dynamiska variabler, om du vill ha dem.
- Stöder bättre uppräkning med
yield
uttalande. - Det låter dig definiera nya värdetyper (eller icke-referens).
Redigera – Adressera kommentarer
- Jag sa inte att C ++ inte stöder native RAII. Jag sa att Java inte har det (du måste uttryckligen göra ett försök / äntligen). C ++ har automatiska pekare som är bra för RAII, och (om du vet vad du gör) kan också ersätta skräpsamling.
- Jag sa inte något om mulera fria funktioner. Men till exempel om du behöver komma åt ett fält med en
this
-pekare och bind metoden som gör det till en generisk funktionspekare (dvs inte i samma klass), då finns det helt enkelt inget infödd sätt att göra det. I C # får du gratis. Du behöver inte ens veta hur det fungerar. - Genom att " behandla medlemsmetoder som fria funktioner " Jag menade att du till exempel inte kan binda en medlemsmetod till en fri funktionssignatur eftersom medlemsmetoden " i hemlighet " behöver
this
-pekaren. - Uttrycket
using
, uppenbarligen tillsammans med ID-engångsförpackningar, är ett bra exempel på RAII. Se den här länken . Tänk på att du inte behöver RAII lika mycket i C # som du gör i C ++, eftersom du har GC. För specifika tider du behöver det kan du uttryckligen användausing
uttalande. Ytterligare en liten påminnelse: att frigöra minne är en dyr procedur. GC har sina prestandafördelar i många fall (speciellt när du har mycket minne). Minne kommer inte att läcka ut och du kommer inte att spendera mycket tid på deallocating. Dessutom är allokering också snabbare, eftersom du inte tilldelar minne varje gång bara en gång i taget. Att ringanew
ökar helt enkelt en sista objekt-pekare. - " C # är värre genom att den har sopsamling ". Detta är verkligen subjektivt, men som jag sa högst upp, för den mest moderna, typiska applikationsutvecklingen är skräpsamling en hel del fördel.
I C ++ är dina val att antingen hantera ditt minne manuellt mednew
a nddelete
, vilket alltid empiriskt leder till fel här och där, eller (med C ++ 11) kan du använda automatiska pekare, men kom ihåg att de lägger till lots och mycket brus till koden. Så GC har fortfarande en kant där. - " Generics är mycket svagare än mallar " – jag bara inte ” t vet var du har det ifrån. Mallar kan ha sina fördelar, men enligt min erfarenhet är begränsningar, generisk parametertypskontroll, kontravarans och kovarians mycket starkare och eleganta verktyg. Styrkan i mallar är att de låter dig leka med språket a bit, vilket kan vara coolt men också orsakar massor av huvudvärk när du vill felsöka något. Så allt som allt har mallar sina fina funktioner, men jag tycker att generika är mer praktiska och rena.
Kommentarer
- Och om du fortfarande vill ha en Garbage Collector för C ++ kan du ladda ner en .
- låt oss fortsätta denna diskussion i chatt
- En annan viktig funktion i C # jämfört med Java, av prestationsskäl, är " struktur ", en typ av objekt som kan lagras på stacken (eller i CPU-register, i speciella fall) eller inbäddade i andra högobjekt. De används ofta för små objekt med 1-4 fält, till exempel X, Y-koordinatpar.
- @LokiAstari Sinnet förklarar? Så länge du kommer ihåg att avregistrera händelsehanterare och använda Dispose-mönstret på klasser som innehåller inbyggda omslag, kommer du ' att bli bra. Att ' är mycket mindre att veta och komma ihåg än minneshantering i C ++.
- -1 eftersom jag saknar avsnitten " C ++ är bättre än C # genom att … " och " Java är bättre än C # … ". Jag tror inte att C # är överlägset inom alla områden, så ett svar utan dessa två avsnitt saknar förmodligen någon viktig information.
Svar
Miljön
.NET Framework och Windows-klienter
Windows är det dominerande operativsystemet på klientdatorer. De bästa GUI-ramarna för Windows-applikationer är Winforms och WPF tillsammans med .NET Framework . Det bästa programmeringsspråket att arbeta med .NET Framework och dess API: er är C # . Java är inte ett alternativ för detta.Och C ++ är ett äldre språk utan automatisk minneshantering. C # liknar C ++ men har automatisk minneshantering och du behöver inte arbeta med pekare, vilket gör dig mer produktiv. C ++ kan fortfarande vara det bästa alternativet i vissa fall, men inte för formintensiva databasapplikationer som är vanligt i affärer.
IIS och Windows Server
Om du är van vid att arbeta i Windows-miljö och med C # behöver du minst investering för att lära dig IIS för serverprogrammering och Windows Server för grundläggande administration.
Active Directory och Windows Server
Om du utvecklar programvara som kommer att distribueras i företagsnätverk är det troligt att de använder en Windows-centrerad miljö med en Windows Server med Active Directory. I en sådan miljö är det lättast att integrera och distribuera en lösning gjord i C # och .NET Framework .
Personligen är jag Java-utvecklare, inte en C # -utvecklare, men jag arbetar med webben. Jag skulle byta till C # om jag utvecklade nätverksapplikationer för Windows-nätverk. Men jag föredrar Java för Linux-baserade webbservrar. Jag skulle välja C ++ för inbäddade system om jag inte vann många beroenden.
Ja, C # är ett bättre språk med modernare funktioner än C ++ och Java, men det är inte det viktigaste för att välja C # .
Sammanfattning
Miljön för din programvara är viktigast för valet C # . Om du arbetar i en miljö med Windows-klienter, Windows-servrar, Active Directory, IIS och kanske SQL Server då C # är det bästa språket med .NET Framework .
Om du arbetar i en Unix-miljö med t.ex. webbtjänster, skulle Java vara mitt val. Och om du arbetar med inbäddade system eller måste integreras med hårdvaruenheter C ++ skulle vara ett bra val.
Kommentarer
- Absolut – det är därför jag använder C # egentligen inte någon annan anledning
- Du kan verkligen använda .NET på andra plattformar via Mono, MonoTouch och MonoDroid, men mina riktmärken tyckte att Mono var betydligt långsammare än .NET för Windows och Microsoft ' s egen Compact Framework är extremt långsam i Windows CE: codeproject.com/KB/cross-platform/BenchmarkCppVsDotNet.aspx … naturligtvis är WPF bara tillgängligt i Windows (men jag har inte ' gillar det ändå.)
- Vilka beroenden menar du med " Jag skulle välja C ++ för inbäddade system om jag inte ' t vann ' t många beroenden. " Menar du java-biblioteken?
- @Puckl ja, men mestadels jvm / jre.
- " Om du arbetar i en Unix-miljö med t.ex. webbtjänster " det finns några andra språk & ramar som kan övervägas: ruby, Python, node.js etc
Svar
C # och Java
C # är ett mycket bra språk om:
- Du vill göra allmänt ändamål objektorienterad utveckling. Det är ett klassiskt OOP-språk.
- Du riktar dig bara till Microsoft-plattformar (det är värt att komma ihåg att Microsoft effektivt klonade Java för att skapa C # eftersom de ville ha ett Java-liknande språk som skulle låsa människor in i Windows. De kunde ha använt Java, men det skulle ha gjort det möjligt för människor att enkelt köra applikationer på andra plattformar ….)
C # som språk är trevligare än Java på olika sätt (bättre syntax för egenskaper, värdetyper, reified generics etc.). Jag föredrar C # som ett språk framför Java, men i det stora schemat av saker är de ganska lika språk och lämpliga för liknande applikationer.
Å andra sidan har Java också några stora fördelar:
- Enormt öppen källkodsekosystem – Java-biblioteken som du kan få gratis är by långt det bästa av alla språk. Det är svårt att överdriva vikten av detta – från punkten att få saker gjort är Java mycket effektivt.
- Verktyg – Java-verktygen är enligt min mening bättre än vad du kan få .Net-världen . t.ex. Maven (när du väl behärskar det!) Är särskilt imponerande.
- Underhåll – Java har funnits ett tag och har varit framgångsrikt i stora företag just för att det är relativt stabilt och det har lagts mycket arbete på bakåtkompatibilitet. Den enkla och lättfattiga syntaxen hjälper också Java här – det är lättare att läsa och underhålla koden om koden är mycket tydlig och tydlig.
- Nya språk – JVM har några fantastiska nya språk (Scala, Clojure , Groovy etc.) som är framtiden för Java-plattformen. Det är här som mycket av språkinnovationen sker och det händer mycket snabbare än i Java eller C #.
Så Java vs C # är ett ganska nära samtal och det handlar verkligen om du vill vara i Microsoft-lägret eller Open Source / plattformslägret.
Personligen föredrar jag Java eftersom:
- Biblioteksekosystemet är enligt min mening mycket viktigare att det faktum att C # har trevligare syntax än Java
- I det långa loppet vill jag att min kod ska vara ordentligt korsad -plattform och kunna köra på stora kluster av billiga Linux-maskiner i molnet.
- Clojure är IMHO det mest lovande språket i världen just nu, och om jag håller fast vid JVM-plattformen kommer jag att kunna att tran dela min kod och färdigheter enkelt i Clojure över tiden.
C / C ++
C / C ++ är i grunden ett helt annat djur. Jag skulle inte rekommendera det för allmän applikationsutveckling nuförtiden av följande skäl:
- Minneshantering – för de flesta allmänna ändamålsprogrammeringar nuförtiden vill du inte vara hantera ditt eget minne. Avfallssamling i C # eller Java är mycket bättre för din produktivitet och förnuft än någon av de explicita minneshanteringsmetoderna du kommer att behöva använda i C / C ++
- Komplexitet – C ++ är särskilt ett extremt komplext språk. Det tar lång tid att behärska och koden i sig kan också vara djupt komplex. (C ++ mallar är till exempel särskilt håriga ….)
- Produktivitet – för det mesta och allt annat eftersom det är lika tar det längre tid att göra saker i C / C ++.
Men det är utan tvekan ett utmärkt val inom ett visst begränsat antal specialdomäner, i synnerhet:
- Operativsystem – du vill antagligen använda C / C ++ om du skriver ett operativsystem.
- Spelutveckling – nästan alla t de bästa kommersiella spelmotorerna är C / C ++. Det är fortfarande det bästa valet om du utvecklar en krävande AAA-titel (C # och Java är helt bra för mindre krävande / avslappnade spel)
- Högpresterande dator – optimerad C / C ++ är förmodligen det bästa sättet att skapa mycket högpresterande kod. För de flesta applikationer är den här optimeringsnivån inte värt ansträngningen, men på vissa domäner kan det vara extremt värdefullt (till exempel högfrekvent handel)
- Hårdvaruåtkomst – Du behöver direkt tillgång till hårdvaran (t.ex. för ett inbäddat system)
Så i grund och botten är C / C ++ ett utmärkt val om och bara om du är fokuserad på en av domänerna där den är särskilt väl lämpad .
Kommentarer
- Du nämner maven som ett exempel på bättre verktyg för java. Jag ' är inte särskilt berömd med det, men när man tittar på dokumentationen ser Maven lite ut som det inbyggda. Net-byggverktyget MSBuild. Vad gör Maven bättre än MSBuild?
- +! (bara för att jag bara har en röst): du har förklarat mycket bra varför Java-ekosystemet är bättre och varför man inte bara ska jämföra syntaksen för C # vs Java. Java har fler och bättre bibliotek och verktyg. Inte mycket händer på själva Java-språket, men nya mycket intressanta språk dyker upp för JVM som är (IMO) mycket mer intressanta än C #. Jag känner inte Clojure men jag tycker att Scala är väldigt intressant: utformad för att vara OOP + FP från början.
- varför är det som alla tycker att C ++ – koden är full av manuell minneshantering. Det är inte C du vet, RAII betyder att du nästan aldrig behöver tilldela / frigöra minne manuellt (de gånger du gör är de där ett språk som C # skulle vara värdelöst för dig).
- @gbjbaanb – förmodligen för att RAII är otillräcklig för minneshantering för allmänt ändamål. Det motsvarar inte på något sätt flexibilitet med ett fullständigt GC-system som du ser i Java eller C #. Så snart du går utöver gränserna för RAII, är du tillbaka i det manuella minneshanteringsområdet.
- @mikera Vill bara påpeka att det finns en hel del språkutveckling på .NET-plattformen också. T.ex. F # är ett snyggt funktionellt språk som smidigt integrerar resten av .NET, och Python portades nyligen till .NET som Iron Python (och fick en fin IDE också! ).
Svar
I heard that syntactically they are almost the same.
Syntaktiskt? Vem ger flygande apor om syntax? Syntax är bra för bara en sak: möjliggör snabbare migrering från syntaktiskt liknande språk. Det är allt.
C # är mycket bättre än Java. Tänk på deras generiska och funktionella programmeringsstöd – C # ligger långt före Java. För att inte tala om operatörens överbelastning och andra bra saker – C # är mycket bättre presenterad. Det finns inget sätt att Java skulle kunna betraktas som bättre än C #.
C ++ och C # är mer en tävling. C ++ har en otroligt irriterande arkaisk sammanställningsmodell och en massa äldre sjukdomar från C, men dess mallar är väldigt kraftfullare än generiska, och dess resurshanteringsmetoder är mycket mer flexibla och kraftfulla i allmänhet, eftersom using
är ett fullständigt misslyckande , och det körs snabbare.
Kommentarer
- Jag tycker att man borde jämföra både språkfunktioner och tillgängligheten av ett språk på olika plattformar. Med C # one är låst med Microsoft, med Java är det inte: att ' är en stor fördel, åtminstone för UNIX / Linux-utvecklare. OOP + FP är coola funktioner men varför bry sig om C # om du kan jag använda Scala, som körs på JVM och kan gränssnitt med äldre Java-kod? Jag skulle aldrig lära mig ett plattformsspecifikt språk om jag inte tvingas.
- @Giorgio: Mono-projektet finns . Men för det andra tar Microsoft faktiskt hand om sin plattform – de ger den regelbundna stora uppgraderingar. Java har knappast haft något nytt. Frågan handlar också om C # vs Java, inte CLR vs JVM.
- @DeadMG: Såvitt jag vet kan jag inte ta något C # -program utvecklat på Windows och bygga det med Mono. Inte CLR vs JVM? Frågan är om varför människor använder C # eller Java. För att människor ska kunna använda ett språk behöver de en körtid och ett operativsystem. Jag diskuterar inte om att C # har fler funktioner än Java, men Java är mycket mer portabelt: detta är en faktor som kan påverka antagandet av ett språk. Faktum är att Java fortfarande används mycket oftare än C # även om det saknar vissa avancerade funktioner.
- @Giorgio, du kan ta valfritt C # -program och bygga det med Mono. Du kan inte använda vissa bibliotek (som ändå inte är delar av C # -språket). Och java är inte " mycket mer bärbar ". Du kan koda för iOS i C #, men inte till exempel i Java.
- @Giogio, Mono är minst lika bärbar som JVM.
Svar
Tja C#
har några fina inbyggda funktioner som LINQ
och delegater. Det blir bäst från båda världar – Java
och C++
. Titta här för en fullständig jämförelse.
Men jag gillar Java
världen bättre – mycket mer open source-ramar och den körs på alla plattformar. Och berätta inte för mig om Mono
– det är inte ett tillförlitligt alternativ.
Kommentarer
- +1: " Men jag gillar Java-världen bättre – mycket mer open source-ramar och den körs på alla plattformar. " Låt ' hoppas Oracle inte ändrar detta!
- Tänk på att förklara vad ' inte " pålitlig " i Mono?
- @Petar Minchev, det är inget annat än ditt eget fel. Du måste följa riktlinjerna för bärbarhet och du borde inte använd icke-bärbara bibliotek – och på detta sätt kan alla komplexa applikationer köras pålitligt med Mono. Saker som WPF kommer aldrig att portas.
- @Petar Minchev, det finns många icke-bärbara Java-bibliotek där ute. Du måste alltid vara försiktig med portabilitet, oavsett vilket språk du ' använder. Och hur som helst, frågan handlar om språken, inte de e tredjepartsbibliotek.
- @Petar Minchev, GTK # är bärbar. Använd den istället.
Svar
Enligt vissa källor (se t.ex. http://www.indeed.com/jobtrends ) C # är fortfarande mindre populärt än Java och lika populärt som C ++.
C # tillhandahåller funktioner som Java saknar, t.ex direkt stöd för vissa programmeringsidiomer som egenskaper, funktionell programmeringsstil och så vidare. C # har en högre abstraktionsnivå än C ++, vilket är en fördel när utvecklingstiden är viktigare än programhastigheten.
Personligen föredrar jag fortfarande Java / C ++ -världen. Som Petar Minchev sa, har Java fler ramar och applikationer med öppen källkod, det går överallt, är mindre knutet till en viss leverantör och operativsystem. C ++ har liknande fördelar, även om kod ofta behöver anpassas från en plattform till en annan. Eftersom jag föredrar att utveckla på Linux och, såvitt jag vet, inte kan ha fullfjädrad C # på Linux, fick jag aldrig ett riktigt intresse för C # eftersom mina programmeringsbehov täcks av C, C ++, Java, Scala.
Å andra sidan är det inte ett problem för många utvecklare som är knutna till en viss leverantör: Microsoft har en dominerande ställning på operativsystemmarknaden och C # ger många jobbmöjligheter. Därför använder IMO många utvecklare C # eftersom det förutom att vara ett funktionsrikt språk också är en bra investering.
Kommentarer
- " Jag kan inte ha fullfjädrat C # på Linux " – Kan du utarbeta detta? Menar du att det fullständiga .Net-ramverket inte är ' t tillgängligt eftersom jag inte har ' att stöta på några problem med själva C # -språket eller F # för den delen) på Linux?
- @wawa: Såvitt jag vet motsvarar .Net-ramverket JDK, och .Net-ramverket är endast tillgängligt för Windows medan JDK är tillgängligt för flera OS ' s. Om detta inte är korrekt kan jag redigera mitt svar (och ändra min åsikt också).
- Jag tror att en närmare analogi skulle vara basklassbiblioteket till JDK. BCL har standardiserade och icke-standardiserade delar. Monoprojektet implementerar såväl standardiserade som mycket av icke-standardiserade bitar.
- @wawa: Tack för informationen. Jag överväger att ge C # ett försök att använda Mono. Ändå har jag fortfarande en ganska stark känsla av att C # är mycket starkare knuten till Microsoft än Java är till Oracle (eller till Sun tidigare).
Svar
Vad sägs om " Vilken programutvecklingsram som innehåller ett programmeringsspråk " dess bättre?
Du glömde att inkludera andra saker, som " -miljön " du kommer att arbeta med.
-
Fungerar du bara för Windows OS, men behöver inte vara lågt och ha mycket minne och andra resurser?
Välj .NET som ramverk över Windows och använd C #.
-
Fungerar du bara för Windows, men behöver inte vara låg nivå, MEN, behöver inte har mycket resurser?
Välj Delphi Framework (och Object Pascal Delphi programmeringsspråk eller Lazarus Object Pascal programmeringsspråk)
-
Behöver du din app. att stödja seve ral plattformar, som ett spel, i olika mobiler?
Välj Java Framework och Java programmeringsspråk.
-
Är det Linux med KDE som grafik gränssnitt?
Välj QT-ramverk, med C ++
-
Är det Linux med Gnome som grafiskt gränssnitt?
Välj GObject / GLib-ramverk , med C ++
-
Kommer du att arbeta med många låga nivåoperationer, som att utveckla drivrutiner?
Vanlig C eller C ++ används för flera operativsystem System med standardbibliotek som ram.
Bara mina två cent.
Kommentarer
- Jag ' är inte säker på 3. Smarttelefoner är mycket populära idag och AFAIK, alla stöder C # i någon form, men bara Android stöder Java.
- Är inte ' t Delphi död? 🙂
- @ šljaker Nej, men är inte ' t mycket populära tesdagar.
- @svick: Det är en lögn. Bortsett från Android finns Java också i någon form på iOS, Symbian, WinMo, Blackberry, Maemo och WebOS (dvs allt som betyder något eller fortfarande betyder något. Inte ' t får mig igång med ännu mindre plattformar). Android, Blackberry och Symbian stöder officiellt Java som utvecklingsalternativ; Sun brukade stödja Java på iOS även om Apple inte gillar det. Java är det primära utvecklingsspråket i Android- och Blackberry-telefoner. Jag kan ' inte säga samma sak med C #, AFAICT det ' stöds endast officiellt på WinMo.
Svar
Om du gör en sökning kommer du sannolikt att stöta på diskussioner om de bästa programmeringsspråken. Här är ett av sökresultaten – http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html – Java verkar fortfarande vara det mest populära språket.
Java försökte ta bort några av bristerna i C ++ (och göra programmerarna enklare för icke-realtids- och icke-kritiska applikationer). Eftersom C # var den som kom sent till festen, undviks några av bristerna i Java-språket. C # har gjort stora framsteg (eftersom Microsoft har mycket kontroll över det) medan framsteg i Java blockerades under en lång tid på grund av konflikt mellan dess intressenter.
Svar
Ett par saker som inte redan har nämnts:
C # är bättre än C ++ eftersom:
Det gör bort med rubrikfiler, vilket översätts till stor enkelhet.
C # är bättre än Java eftersom:
Den stöder både referens-typ (klass) och värdetyp (struct) användardefinierad typer som, om du vet vad du gör, kan ge betydande prestationsfördelar.
Den stöder delegater, som är som gränssnitt för en metod, vilket på så sätt förenklar kodningen av ofta förekommande konstruktioner som involverar objekt med en metod.
Kommentarer
- Kan du förklara på vilket sätt att ha både referens- och värdetypstyper kan ge prestationsfördelar i C #?
- Till exempel om du vill ha en uppsättning poster , i Java har du inget annat val än att beskriva din post med hjälp av en klass, så din array kommer att vara en uppsättning referenser till en mängd olika tilldelade objekt. I C # kan du beskriva din post med hjälp av en struktur, så din matris kommer bara att vara ett enda kontinuerligt minneområde som innehåller dina strukturer efter varandra, precis som i C.
- Som ett annat exempel, om du vill för att definiera en liten ny typ (en typ som passar in i ett maskinord) behöver du inte definiera en ny klass för det; du kan helt enkelt göra det till en struktur, så det kommer att lyda värdesemantik. Att skicka sådana strängar kommer inte att bli dyrare än att skicka referenser till objekt, men du kommer att ha fördelen att du inte tilldelar, konstruerar och sopar in objekt.
- Jag förstår. Så klasser instanseras på högen och nås genom referenser medan strucker instansieras på stacken (?)
- Nästan korrekt. Den enda felaktigheten i detta uttalande är att en struktur kommer att hittas på högen om den är inbäddad i ett annat objekt, eller om den finns i en rad strängar. Och det kommer också att hittas på högen om det någonsin blir boxat, på exakt samma sätt som värdetyper är boxade i Java.
Svar
Du bör välja det bästa språket för din förväntade miljö och din expertis.
Välj C # om du arbetar i en enda Microsoft-miljö. Medan C # är standardiserat enligt ISO / IEC 23270: 2003 är Microsofts version den enda fullständiga implementeringen. Flera viktiga delar av språket täcks inte av standarden och omfattas därför av Microsofts patent. Ingen annan kommer att implementera en helt kompatibel version av språket för andra system, så i själva verket är du leverantörslåst till Microsoft Windows och .Net så länge du använder språket. Om du letar efter färdigheter att använda på mobilmarknaden, är det bäst att titta på ett annat språk.
Java fungerar, men har en hel del omkostnader, delvis på grund av funktioner som skräpsamling. Java är inte heller standardiserat av ISO / IEC, så du har inga garantier om du byter plattform och versioner av Java, bara Sun / Oracles bästa avsikter. Om du så småningom planerar att arbeta med Android är detta definitivt vägen att gå . Android-programmering är i grunden Java, med några ändringar.
C ++ är standardiserad och nästan alla kompilatorer följer den internationella standarden, så du har garanterat beteende MEN språket skyddar dig inte från dig själv. Du måste utföra rengöring och överflödskontroll på egen hand. Det här är inte svårt. C / C ++ – programmerare har gjort dessa i många år. Apple använder Objective C för allt, så om du vill sikta mot Apple rekommenderar jag att du provar detta istället.
Om du ser att du lämnar Windows bakom dig någon gång föreslår jag att du lär dig både C / C ++ och Java – som båda kan säljas just nu.
Svar
I förhållande till C ++ vs C # (eftersom jag inte är tillräckligt skicklig i Java), saknar jag här möjligheten att få tillgång till låga nivåer i Windows. Du kan till exempel inte utveckla en inbyggd skärmdrivrutin i C # (ännu), men du kan med C ++. Detta gör inte C ++ bättre. Jag ser C ++ kontra C # som montering kontra C.
C # finns i min se mycket mer effektivt om du tittar på den tid det tar att faktiskt implementera en funktion. Prestationsstraffet för. Net-körtiden är försumbar för 99% av de utvecklade applikationerna. Det kan vara av betydelse om du kör en tät slinga, ja på alla sätt, men för det mesta är en applikation inaktiv och väntar på någon typ av ingång, signal eller avbrott (disk IO, knappklick, nätverk, slutförande av animering).
CLR-biblioteket med alla sina funktioner har något annat r stor fördel. När jag tränade C # för juniorutvecklare sa de flesta att de gillade den logiska namngivningskonventionen för klasser, medlemmar och namnområden. Att hitta en funktion av metoden var logisk över SDK, något som Visual Basic 5 var allvarligt bristfälligt på. Detta har hjälpt dem oerhört med att anta biblioteket. Efter att ha lärt sig syntaxen för ett språk är det viktigt att lära sig ett nytt bibliotek för att få ett bra grepp om SDK. Det sparar dig från att återuppfinna hjulet.