C#

hallo Leute,
ich treniert mich gerade mit C#, mit den klassen Circle und Square. aber der compiler zeigt mir 3 fehlern:

-Fehler 1 Eine implizite Konvertierung vom Typ „Circle“ in „double“ ist nicht möglich.
-Fehler 2 Eine implizite Konvertierung vom Typ „Square“ in „double“ ist nicht möglich.
-Fehler 3 Eine Konvertierung vom Typ „Circle“ in „Square“ ist nicht möglich.

kann jemmand bitte mir helfen.
Danke im voraus

class Square
{
//datamember
public double x, area;

//konstruktor
public Square(double a)
{
x = a;
area = a * a;
}
public Square()
{
x = 0.0;
area = 0.0;
}
}

class Circle
{
//datamember
public double radius, area;

//konstruktor
public Circle(double r)
{
radius = r;
area = Math.PI * r * r;
}
}

class Program
{
static void Main(string[] args)
{
Circle c = new Circle(10.0);
Square s1 = new Square(10.0);
double F1 = c;
double F2 = s1;
Console.WriteLine(„F1:{0} F2:{1}“,F1,F2);

Square s2 = new Square();
s2 = (Square)c;
Console.WriteLine(„x_s2:{0} a_s2:{1}“,s2.x,s2.area);
}
}

Hallo

Klar kann ich helfen :wink:
Alle drei Fehler liegen in der Main-Methode.

double F1 = c;

Wie soll das gehen? c ist ein Circle und keine Fließkommazahl, was erwartest du was das Programm an dieser Stelle macht? Ohne weitere Hinweise weis der Compiler nicht, wie es dein c in einem double speichern soll.

double F2 = s1;

Das selbe mit Square. Man kann nur gleiche Objekte einander Zuweisen, bzw. welche, die ineinander konvertiert werden können.
Square und double sind aber grundverschieden.

s2 = (Square)c;

Fast noch einmal das selbe. Wie willst du einfach so einen „Kreis“ in ein „Viereck“ verwandeln. Das ist ja schon von der Logik her unsinnig. (oder wollen wir etwa so die Quadratur des Kreises nachweisen? ;D)

Was bezweckst du mit diesen Zuweisungen. Das wäre mal ganz interessant wenn du bessere Hilfe möchtest!

MfG IGnow

wie kann ich die implicit und explicit operator schreiben, um die fehler zu korigieren? ich habe schon die implicit und explicit operator im Google gelesen, aber klap nicht

Danke

Hallo

Könntest du mir mal sagen wir man einen Kreis in eine Fließkommazahl umwandeln kann bzw. in ein Quadrat? Das ergibt für mich irgendwie keinen Sinn!^^

Aber trotzdem ich schreibs mal am Beispiel von Square:

class Square
{
 //datamember
 public double x, area;

 //konstruktor
 public Square(double a)
 {
 x = a;
 area = a \* a;
 }
 public Square()
 {
 x = 0.0;
 area = 0.0;
 }

 public static explicit operator double(Square square)
 {
 // return (... was auch immer du machn willst ...);
 }
 public static explicit operator Circle(Square square)
 {
 // return (... was auch immer du machn willst ...);
 }
}

MfG IGnow

Hallo!
Bitte tue uns und Dir selbst einen Gefallen und arbeite ein Buch zur Einführung in die objektorientierte Programmierung durch (in den FAQs gibt es meines Wissens nach Links dazu).
Die Art von Trial&Error-Programmierung, zu der Du bisher Deine Fragen gestellt hast, wird Dich nur frustrieren - so kommst Du nicht weiter.
Versuche die Konzepte hinter OO zu verstehen, bevor Du nach impliziten und expliziten Typkonvertierern fragst, dann erledigt sich die Frage nämlich sehr schnell (wie von anderer Seite schon geschrieben, macht es einfach keinen Sinn, einen Kreis in ein Quadrat umzuwandeln!).

Gruß,
Martin

P.S.: Wie ebenfalls bereits wiederholt erwähnt, wären aussagekräftigere Titel als „C#“ hilfreich…

wie wärs mal wenn du dir in diesem Buch die Kapitel 1-4, 12-14.
http://openbook.galileocomputing.de/visual_csharp/
Lg der einzigware