Wichtige Unterschiede zwischen C# und VB.NET

  • C#

Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von Gonger96.

    Wichtige Unterschiede zwischen C# und VB.NET

    Hi,

    da ich Projekt bedingt plane auf C# umzusteigen, wollte ich mir es anschauen und habe es auch mithilfe von MSDN hingekriegt eine Klasse von VB.NET nach C# umzuschreiben. Bevor ich jetzt viel falsch mache wollte ich fragen: Was sind wichtige Unterschiede zu VB.NET? Gibt es etwas das C# "mehr" kann? Gibt es auch irgendwelche Fallstricke wie Option Strict?

    Grüße faxe1008

    8-) faxe1008 8-)
    Schau mal nach nem Thread der heißt iwie "Warum wird von VB immer abgeraten" oder sowas. Da wurde das erst kürzlich länge mal breite diskutiert.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    C# hat wie du erwähnt hast soetwas wie Option Strict nicht, das ist Standard, dass man konvertieren muss.
    Die Syntax ist anders aufgebaut, aber teils viel kürzer als in VB.NET! Zudem gibt es so Sachen, wie Form2.Show() dort nicht, das muss alles instanziiert werden. C-Sharp hat zudem einen in VB nicht vorhandenen Operator: "?" Das ist dazu da, um einen boolschen Wert aus zwei Konditionen zu erzeugen!

    Quellcode

    1. condition ? first_expression : second_expression;


    C# hat afaik auch nen besseren Umgang bzw mehr Möglichkeiten in der Interkation mit unmanaged DLLs, vorallem mit welchen, die aus C stammen. Du hast einfach einen besseren Strick zu weiteren Sprachen, wie C und C++ etc., wenn du C# kannst. Es ist einfach so, man gewöhnt sich irgendwann dran und will nicht mehr zurück ;)
    #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:

    C-Sharp hat zudem einen in VB nicht vorhandenen Operator: "?"


    VB.NET-Quellcode

    1. Dim c As Color = If(100 > 101, Color.Red, Color.Green)
    2. Dim s As String = If(100 > 101, "huhu", "servus")
    3. Dim i As Integer = If(101 < 100, 50, 60)


    Das stimmt nicht.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    So das Basiczeug wie Vergleichsoperatoren oder int testinteger = 0; oder auch Konvertierung kann ich schon. Es ging mir mehr um die grundlegenden Unterschiede als die Syntax ;). Auch noch eine Frage: warum interpretiert C# 0+0^3=3. Mit Math.pow hingegen gehts ?(

    8-) faxe1008 8-)
    @SpaceyX: Na ja... Ich meinte den Operator "?" genau als solches gibt es so nicht. ^^
    #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:

    Ich meinte den Operator "?" genau als solches gibt es so nicht. ^^
    Doch, das ist genau dieser Operator. Genau wie es den ??-Operator aus C# auch in VB.NET gibt (If(a, b)). Man schreibt ihn halt nur so. Der Compiler macht am Ende das gleiche draus. Genau wie int a = 10; das gleiche wie bei VB.NET Dim a as Integer = 10 ist.

    In VB gibt es übrigens auch noch einen "Operator": IIf(a,b,c). Verhält sich ähnlich wie das Inline-If (If(a,b,c)), ist aber als Funktion und nicht als Operator implementiert. Das hat dann diverse Nebenwirkungen. Ihr könnt ja mal folgendes ausprobieren:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim einBool as Boolean = (New Random).Next() > 0.5
    2. Dim a = If(einBool, MessageBox.Show("True"), MessageBox.Show("False"))
    3. MessageBox.Show("Nun kommt b...")
    4. Dim b = IIf(einBool, MessageBox.Show("True"), MessageBox.Show("False"))


    faxe1008 schrieb:

    Gibt es etwas das C# "mehr" kann?
    C# hat das berühmte unsafe. Mehr fällt mir gerade nicht ein, was noch viel toller sein sollte. Prinzipiell kann man mit beiden Sprachen das gleiche machen.
    VB.NET hat noch ein Application-Framework, das z. B. den Einzelinstanzkram vollständig selbstständig abwickelt. Sowas muss man in C# selber machen. Außerdem hat VB.NET Form-Standardinstanzen - die kann man aber auch mit einem Trick abstellen.
    Von meinem iPhone gesendet
    @Trade: Ich möchte nur anmerken, dass es ein Äquivalent für ? in VB gibt:

    VB.NET-Quellcode

    1. If(Condition, TrueExpression, FalseExpression)

    Nicht zu verwechseln mit der IIf-Funktion


    Edit: War zu langsam.
    VB hat leider das Problem, dass viele Altlasten dabei sind. Die meisten wie z.B. den Microsoft.VisualBasic-NameSpace, den My-NameSpace oder die Standardinstanzen kann man umgehen aber viele auch nicht. Wie von mir schon angeprangert wurde, dass Extensions aufgrund der völlig hirnverbrannten Möglichkeit, spät gebundenen Code zu schreiben, nicht auf Ausdrücke vom Typ Object angewandt werden können: Klick

    @ThuCommix: Ich verstehe nicht.... Man kann auch CSharp schreiben (wird meistens auch gemacht). Es gibt auch F# und J#.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Habe ich das richtig verstanden: ?
    true ^ false = true
    false ^ false = false

    Aber wie ist dadurch die Rechnung 0+0^3=3 zu erklären? 3 ist nähmlich weder True(1) noch False(0). Wie wird das vom Compiler interpretiert?

    ThuCommix schrieb:

    C# besitzt eine Raute im Namen


    Wem gegenüber war das jetzt ironisch gemeint ^^?

    8-) faxe1008 8-)

    faxe1008 schrieb:

    Wie wird das vom Compiler interpretiert?

    Er wirft dir eine Compilerexception in's Gesicht. Aber nur, weil du nicht sagen kannst, dass 0 = 3 ist. Passieren tut folgendes:

    C#-Quellcode

    1. // 0 ^ 3 == 3 <-- ^ ist nicht nur das logische Xor, sondern auch das bitweise. Ähnlich wie Or und And in VB.
    2. // 0+0^3 == 3
    3. // = (als Zuweisungsoperator)
    4. 0+0^3 = 3
    5. // Bedeutet
    6. 3 = 3 // Weise 3 den Wert 3 zu. Wird wahrscheinlich nicht funktionieren.


    Für eine Potenz benutzt man in C# Math.Pow(). VB.NET macht am Ende auch nichts anderes, aber naja.
    Von meinem iPhone gesendet

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

    Was hauptsächlich da ist was VB nicht hat ist unsicherer Kontext. Die Operatoren * und &. int* i<- Pointer auf ein int *i <- Daten dieser Speicheraddresse und int f = 9; &f <- Speicheraddresse von f

    Mit C# Grundlagen kommt man (nur von der Syntax her) halbwegs mit C klar. C++ würde einen dann aber wahnsinnig machen, da gibts nämlich größere Syntaxunterschiede
    Bitwise-XOr, nicht logisches XOr. Bei bitwise-Operatoren werden alle Bits einzeln miteinander verglichen, wobei 1 als true und 0 als false angesehen wird. Im Prinzip sind logische Operationen also Bitoperationen mit nur einem Bit, und ein Boolean stellt genau ein Bit dar.
    In deinem Fall ist die 3 in binär 00000011 und die 0 ist 00000000 (ich hab einfach mal nur Bytes genommen, weils bei nem Int32 sehr viele Nullen wären). Die ersten beiden Bits (von rechts aus) ergeben mit XOr verknüpft 1, die restlichen 6 ergeben 0, also kommt am Ende wieder 3 raus.
    @faxe1008:
    Die XOR-Verknüpfung sieht so aus:

    Quellcode

    1. V = A ^ B
    2. A B V
    3. 0 0 0
    4. 0 1 1
    5. 1 0 1
    6. 1 1 0
    0 repräsentiert false, 1 repräsentiert true.

    0^3 ist binär gesehen das:

    Quellcode

    1. ...000011
    2. ...000000

    Und da wird einfach jedes Bit vom ersten Wert mit dem passenden Bit vom zweiten Wert XOR-verknüpft. Und das ist bei den zwei rechten Bits 1^0 und das ist 1, und bei den linken Bits 0^0, was 0 ergibt.
    Das ergibt also wieder 3.


    @ThuCommix: Sarkasmus funktioniert im Internet nicht gut. Das habe ich selbst erfahren müssen. Bei einem Video hat jemand einen RFID-Chip in einen Holzstock geleimt und ich habe darunter geschrieben
    I'm just waiting till someone asks what happens when it runs out of batteries.

    Darauf hab ich eine Menge Antworten bekommen, die erklärt haben, dass das Teil ohne Batterien läuft.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils