C# nach VB.Net

Oberchefe

Level-3
Beiträge
3.689
Reaktionspunkte
905
Zuviel Werbung?
-> Hier kostenlos registrieren
Habe folgendes zum Übersetzen von C# nach VB.Net:

C#:
using System;
using System.Drawing;

namespace WebEye
{
    public class FrameRecievedEventArgs : EventArgs
    {
        public FrameRecievedEventArgs(Bitmap frame)
        {
            Frame = frame;
        }

        public Bitmap Frame { get; }
    }
}

Habe schon einige Online-Übersetzer ausprobiert, bei keinem kommt meiner Meinung nach fehlerfreier Code zustande.

Entweder es kommt gar kein Ergebnis zustande:

es kommt was falsches zustande:

oder es kommt mindestens eine Warnung raus:

und ich gehe davon aus dass das Ergebnis auch nicht funktioniert


Nicht besser wird es beim nächsten Versuch mit

C#:
using System;

namespace WebEye
{
    public class StreamFailedEventArgs : EventArgs
    {
        public StreamFailedEventArgs(String error)
        {
            Error = error;
        }

        public String Error { get; }
    }
}

Da wird mir dann zudem noch das "error" bemängelt als vom System reserviertes Schlüsselwort.

Ich kenne mich leider so gut wie gar nicht mit C# aus, hätte aber vermutet dass es hier dann das Schlüsselwort auch geben müsste?

Wie sieht die korrekte Übersetzung aus? Kennt sich jemand in beiden Welten aus?
 
Hast du es hier mal versucht ?

 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hast du es hier mal versucht ?
ChatGPT sagt zu dem Code aus #1 ganz unten:
I'm sorry, but I don't see any error in the code you provided. It looks like a C# class definition for a StreamFailedEventArgs class, which extends the EventArgs class and has a single constructor that takes a string parameter representing an error message.
If you are experiencing an error while using this code, please provide more information about the error and the context in which it occurs. This will help me better understand the issue and provide a more accurate response.
 
Wenn man den Fehler mehr definiert kommt:

I see what the issue is now. The problem is that "error" is a reserved keyword in C#, and you cannot use it as an identifier (e.g., variable name, property name, etc.) in your code.

To fix this, you can simply choose a different name for the parameter and the property. For example, you could change them to "errorMessage" and "ErrorMessage", respectively, like this:

C#:
using System;

namespace WebEye
{
    public class StreamFailedEventArgs : EventArgs
    {
        public StreamFailedEventArgs(String errorMessage)
        {
            ErrorMessage = errorMessage;
        }

        public String ErrorMessage { get; }
    }
}
This should resolve the issue with the reserved keyword. Let me know if you have any questions or if there's anything else I can help with.


Als Fehlerdefinition habe ich einfach den Text von @Oberchefe kopiert:
Da wird mir dann zudem noch das "error" bemängelt als vom System reserviertes Schlüsselwort.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke euch. Das mit dem error als Schlüsselwort kann wohl auch umgangen werden indem man es in eckige Klammern setzt (also [error]).

Mich irritiert dabei aber, dass das error in C# mal groß und mal klein geschrieben ist und befürchte, dass da auch zwei verschiedene Dinge gemeint sind.
Außerdem bleibt das Problem, das das Get im übersetzten Code kein Gegenstück hat und kein End Property da steht. Das müsste meiner Meinung nach ungefähr so aussehen:
Code:
        Public ReadOnly Property [Error] As String
            Get
                ''
            End Get
        End Property

und zwischen Get und End Get sollte meiner Meinung nach Code stehen.


Die KI habe ich noch nicht ausprobiert weil ich mich nicht überall registrieren will.
 
Mich irritiert dabei aber, dass das error in C# mal groß und mal klein geschrieben ist und befürchte, dass da auch zwei verschiedene Dinge gemeint sind.
Ich habe die KI noch mal versuchsweise mit deiner Frage gefüttert. Hier die Antwort. ( PS: Ich wollte einfach mal schauen, was die KI so antwortet ):

I apologize for any confusion. In C#, the conventions for naming variables and other identifiers are to use camelCase (e.g., "errorMessage") for local variables and fields, and PascalCase (e.g., "ErrorMessage") for class-level members (e.g., properties, methods).

The Error property in the StreamFailedEventArgs class that I provided in my previous message follows these conventions, with a camelCase name for the private field and a PascalCase name for the public property.

Regarding the Get keyword and the lack of a End Property statement in the code, these are part of the syntax for properties in C#. A property is a member of a class that provides a way to read or write the value of a private field.
 
Code:
        Public ReadOnly Property [Error] As String
            Get
                ''
            End Get
        End Property

und zwischen Get und End Get sollte meiner Meinung nach Code stehen.
Da muss mMn. noch Return Error rein. Error groß ist der im Objekt gespeicherte String, dem bei der Konstruktion klein error zugewiesen wird. Damit der Getter genauso wie in C# verhält, muss Error zurückgegeben werden.
 
Mich irritiert dabei aber, dass das error in C# mal groß und mal klein geschrieben ist und befürchte, dass da auch zwei verschiedene Dinge gemeint sind.
Außerdem bleibt das Problem, das das Get im übersetzten Code kein Gegenstück hat und kein End Property da steht.
Das mit dem kleinen un dem großen "Error" liegt daran, dass C# da in der Schreibweise differenziert und VB.Net augenscheinlich nicht.
Eine Property braucht nicht zwingend einen Getter oder Setter (oder beides) benötigt. Du kannst immer auch direkt den Property-Namen zuordnen - die Getter/Setter sind dafür da, wenn die Property z.B. einen "Merker" haben soll - also die Zuweisung sich gemerkt werden soll. Außerdem natürlich wenn dort etwas gemacht/berechnet werden soll.

Dazu liesse sich noch viel schreiben - es hängt immer mit der konkreten Zielsetzung zusammen ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
( PS: Ich wollte einfach mal schauen, was die KI so antwortet ):
Und wie fühlt es sich an?


Momentan erkennt man das Teil ja wohl daran, daß es
a) sich entschuldigen kann "I apologize for any confusion."

b) ziemlich ausführliche Erklärungen gibt >>In C#, the conventions for naming variables and other identifiers are to use camelCase (e.g., "errorMessage") for local variables and fields, and PascalCase (e.g., "ErrorMessage") for class-level members (e.g., properties, methods).

The Error property in the StreamFailedEventArgs class that I provided in my previous message follows these conventions, with a camelCase name for the private field and a PascalCase name for the public property.<<

und c) das auch ziemlich geschliffen ausdrückt, sogar ohne Rechtschreibfehler!

Auch wenn ich das Teil für eine komplett hirnrissige und größenwahnsinnige Ressourcenverschwurbelung halte, beeindruckend ist das wahrlich.


Meine obige Frage war übrigens ernst gemeint. Ich habe mich tatsächlich kurz gefragt, wie wahrscheinlich es ist, dass mal jemand einen eher altertümlich Gebildeten für das Programm hält... :-)
 
Zurück
Oben