C# vs VB.NET

  • Allgemein

Es gibt 30 Antworten in diesem Thema. Der letzte Beitrag () ist von Niko Ortner.

    Hallo alle die ein wenig mit machen wollen...

    Wollte konkret mal eine Frage stellen, die mich echt interessiert: C# oder vb.net?

    Ich persönlich kann beides gleich gut bzw. schlecht. Wobei mein Favorit eindeutig C# ist... Zu meiner Begründung:
    - Durch die Syntax und damit beinhaltete Klammern ist es irgend wie näher an Mathematik. Dadurch irgend wie verständlicher.
    - Geschwindigkeit. Mehrere Test die ich extra dafür geschrieben habe, erwies sich C# um in Durchschnitt 20% schneller.
    - Recht nah an C/C++, hierdurch können mController gleich mit erschlagen werden.
    - Lässt sich schneller runterschreiben...
    - Namespace sind übersichtlicher... Komischerweise habe ich die Erfahrung gemacht, dass wenn man die Klassen umbenennt oder umkopiert, Namespace vermischt wird.
    - Hat besseren Ruf, warum auch immer...

    Wobei, all das ist nur meine Meinung. Was sagt ihr dazu?
    Die Diskussion gabs doch überall schon 1000 mal.
    Nur diesen Punkt:

    - Geschwindigkeit. Mehrere Test die ich extra dafür geschrieben habe, erwies sich C# um in Durchschnitt 20% schneller.

    bezweifel ich. Es mag sein das der C# Compiler manchmal besseren IL produziert als der Vb.net Compiler. Aber das Ganze dürfte auch andersherum der Fall sein. Aber im Durchschnitt 20% schneller halte ich für ausgeschlossen.
    Das ist meine Signatur und sie wird wunderbar sein!
    Ich bin auch eher ein freund von C#. Viele stolpersteine von VB gibt es nicht (VB-Namespace)
    Den Geschwindigkeitsvorteil habe ich jetzt noch nicht bewusst wahrgenommen,
    liegt aber vielleicht auch daran das ich Projekte entweder in VB oder in C# umsetzte und daher keinen Vergleich habe.


    @'EugenIS' Der Titel sollte aber lauten .net: C# oder VB
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Verschoben.

    EugenIS schrieb:

    Recht nah an C/C++

    Ja, aber nur syntaktisch.

    VB.NET hat einfach zu viele Nachteile. Einmal die ganzen Sachen wie VB6-Funktionen, My-Namespace etc. und die Tatsache, dass auch Sachen fehlen, die es in C# gibt.
    Zwar auch andersrum, allerdings würde ich da nicht von Vorteilen sprechen.
    Und ansonsten ist einfach die Syntax imo schöner und weiter verbreitet, was andere Sprachen angeht.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    VB.NET ist nicht case-sensitive, was imho sehr nervig ist.
    Ansonsten:
    • kein unsafe
    • kein @ für Multiline-Strings
    • kein checked und unchecked
    • Die For-Schleifen sind in C# semantisch besser und man kann auch Bedingungen abfragen (also nicht nur, ob die Zahl bei der Iteration noch in der Range ist, was ja automatisch passiert) sowie mehrere Variablen gleichzeitig verwenden (wobei ich da nicht weiß, ob das in VB.NET nicht auch geht)
    • keine partiellen Interfaces
    • ??-Operator fehlt, stattdessen Nested-If
    • weitere Operatoren im unsafe-Kontext fehlen, was ja gefolgert werden kann
    • keine statischen Klassen, stattdessen Module, über die bekanntlich etwas gestritten wird, ob diese ein VB6-Relikt seien, oder nicht
    • keine unterschiedlichen Interfaces bei Gettern und Settern einer Property

    Mehr ist mir jetzt nicht eingefallen. Gibt es natürlich auch im Umkehrschluss, aber wie gesagt, das sehe ich nicht als Nachteil, sondern das kann man mit C# genauso lösen, nur halt etwas anders. Beispielsweise Handles, da muss man halt selbstständig abonnieren, wobei der Designer das eh automatisch macht und bei eigenen Events geht das recht fix. In VB.NET wiederrum ist man auf die angesprochenen Sachen beschränkt und es gibt keine (oder zumindest nur sinnlose) Workarounds. Für unsafe müsste man dann halt z.B. immer den Teil in eine C#-DLL auslagern, was aber ja auf Dauer wenig Sinn macht. Kann man gleich CSharp verwenden. ;)

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Ähm, ByRef ist ref oder out in C# und hat was Parameterübergabe zu tun. unsafe ist was komplett anders. Da geht es darum, unsicheren Code auszuführen und auch mit Pointern etc. arbeiten zu können. Also Sachen, die man eigentlich nur nativ hat.
    msdn.microsoft.com/de-de/library/chfa2zb8.aspx

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Hat was mit den maximalen Werten für gewisse Datentypen zu tun, weil die sind ja durch die Bit-Zahl begrenzt) und ob dann Exceptions geschmissen werden etc.
    Am Besten auf MSDN erklärt: msdn.microsoft.com/de-de/library/khy08726.aspx

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    Trade schrieb:


    1. VB.NET ist nicht case-sensitive, was imho sehr nervig ist
    2. kein unsafe
    3. kein @ für Multiline-Strings
    4. kein checked und unchecked
    5. Die For-Schleifen sind in C# semantisch besser und man kann auch Bedingungen abfragen (also nicht nur, ob die Zahl bei der Iteration noch in der Range ist, was ja automatisch passiert) sowie mehrere Variablen gleichzeitig verwenden (wobei ich da nicht weiß, ob das in VB.NET nicht auch geht)
    6. keine partiellen Interfaces
    7. ??-Operator fehlt, stattdessen Nested-If
    8. weitere Operatoren im unsafe-Kontext fehlen, was ja gefolgert werden kann
    9. keine statischen Klassen, stattdessen Module, über die bekanntlich etwas gestritten wird, ob diese ein VB6-Relikt seien, oder nicht
    10. keine unterschiedlichen Interfaces bei Gettern und Settern einer Property
    vielem stimme ich zu, bzw. 1), 5), 9) kann man diskutieren
    aber 7) und 10) ist falsch in dem Sinne, das die vb.net-Entsprechung jeweils vollwertig ist.

    Wegen 6) poste ich, weil Frage: Was ist ein partielles Interface?

    ErfinderDesRades schrieb:

    die Sachen hat vb.net auch

    Wirklich? Wie sehen die in VB.NET aus? Oder zumindest der ??-Operator.

    ErfinderDesRades schrieb:

    Was ist ein partielles Interface?

    Wenn das partial-Schlüsselwort verwendet wird. ;) Geht bei Interfaces in VB.NET afaik nicht, in C# schon. Kann aber auch sein, dass ich mich hier irre. Probiere ich gleich dann mal.
    Edit: "Compilation error (line 3, col 0): 'Partial' is not valid on an Interface declaration." - QED

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Trade“ ()

    mach halt den Snippet-Konverter an:

    C#-Quellcode

    1. var app = Application.UserAppDataPath ?? "naja - unwahrscheinlich";
    =>

    VB.NET-Quellcode

    1. Dim app = If(Application.UserAppDataPath, "naja - unwahrscheinlich")


    und

    C#-Quellcode

    1. public string aProperty { get; private set; }
    =>

    VB.NET-Quellcode

    1. Public Property aProperty() As String
    2. Get
    3. Return m_aProperty
    4. End Get
    5. Private Set
    6. m_aProperty = Value
    7. End Set
    8. End Property
    9. Private m_aProperty As String
    Also hier gibts keine Anonymität, aber dafür kann vb.nets anonyme Property sowas:

    VB.NET-Quellcode

    1. Public Property aProperty As String = "Hi!"
    aber peanuts


    Trotzdem - ich muss c# widerwillig auch als generell bischen besser beurteilen:
    • Neuerungen gibts fast immer zuerst bei denen.
      Sehr neidisch blicke ich etwa auf die sog. c#-"String-Interpolation" (auch wenn das die idiotischste Feature-Bezeichnung ist, die je erfunden wurde - interpoliert wird da ja wohl garnix).
    • Anfänger müssen nicht erst dazu überredet werden, ihre IDE umstellen, um wirklich mit OOP anfangen zu können
    • größerer Fundus an OpenSource, und bessere Qualität derselben
    Hingegen die Geschwindigkeit geht mir sowas vom am A... vorbei: Wenn dein Vb-Proggi laggt werden die c#-20% es auch nicht reissen, sondern strukturelle Verbesserungen sind fällig. Und mit Ausnahme von unsafe kannste die in vb ebensogut umsetzen wie in c#.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()

    @ErfinderDesRades:
    1. Implementationstechnisch fungiert das Nested-If welches @Trade auch bereits genannt hat(womit deine Wiederlegung keine Wiederlegung war, sondern eine Bestätigung) anders als ?? und dürfte langsamer sein, sofern da nicht etwas via inlining optimiert wird(was ich bezweifle)
    2. das ist nicht dasselbe was den sugar anbelangt ;)
    3.
    guess what

    C#-Quellcode

    1. public string aProperty{get;private set;}="Hi!";


    zu @Trade s Beitrag
    1. er schrieb imho(in my honest opinion) und Meinungen kann man nicht diskuttieren nur die Gründe dahinter - und ich Stimme ihm zu
    5. @ErfinderDesRades wo genau bitte ist das VB Konstrukt von Vorteil? Ich sehe ehrlich gesagt keinen Diskussionsbedarf
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    jvbsl schrieb:

    1. Implementationstechnisch fungiert das Nested-If anders als ?? und dürfte langsamer sein
    echt? ist das iwo belegt? Ich habe das bislang für die direkte Entsprechung gehalten.
    Halt anderer syntaktischer Zucker - Geschmackssache.

    jvbsl schrieb:

    wo genau bitte ist das VB Konstrukt von Vorteil?
    naja, wenn du nur von a nach b iterieren willst, ist das in vb schneller hingeschrieben.
    Und dass in c#-for(;;) die Bedingung in jeder Umdrehung neu abgeprüft wird, kann sich auch nachteilig auswirken.

    jvbsl schrieb:

    Ich sehe ehrlich gesagt keinen Diskussionsbedarf
    Ich auch nicht - peanuts halt.
    Ich denke es kommt auch darauf an wo du hin willst mit der Programmierung.
    Wenn du in Richtung ERP-Programmierung also Datenbanken und ABL/4GL willst, dann ist dort die Synthax der Großen (SAP, OpenEdge usw.) der Synthax von VB mMn. ähnlicher.
    Ist alles Geschmackssache.

    EDIT:
    Ist zumindest bei mir der Grund, warum ich den Kleinkram der nebenher anfällt in VB programmiere.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    thefiloe schrieb:

    Das ist murks Das meistgenutzte ERP-System weltweit.

    Also kanns so vermurkst nicht sein. ABAP ist halt darauf ausgelegt, auch für Laien lesbar zu sein.
    Ich bin beruflich ABAP Entwickler. Wenn ich sage Murks, dann tu ich das wohl überlegt. Die gigantische Verbreitung von SAP ist primär historisch bedingt und weil es eben dadurch standardprodukt ist. Markkommunikation etc. läuft nunma auf SAP. Alles andere ist halt noch mehr Arbeit. Der Erfolg kommt aber garantiert nicht daher weil das system technisch überlegen ist,...


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.