Laden...

Implizite konvertieren?

Letzter Beitrag vor 18 Jahren 6 Posts 2.111 Views
Implizite konvertieren?

Hallo Zusammen,

ich spiele ein bischen, und habe dabei festgestellt das
ich Implizites konvertieren nicht verstanden habe.

Die Methode Swap tausch einfach zwei Werte gegeneinander aus.

Wenn ich die Felder a und b jeweils mit F formatieren also
double a = 1.1F; und double b = 11.2F;
und ein mal ohne F also double a = 1.1; und double b = 11.2;
kommen zwei unterschiedliche Ergebnisse heraus.

Die eigenfliche Frage ist, wann benötige ich überhaupt
implizites konvertieren?

   class Program
    {
        public static void Swap<T>(ref T first, ref T second, ref int s)
        {
            T temp = first;
            first = second;
            second = temp;
            s++;
        }       
        static void Main(string[] args)
        {
           double a = 1.1;
           double b = 11.2;
           int c = 10;


           Swap<double>(ref a, ref b, ref c);
           Console.WriteLine(a.ToString() + " " + b.ToString() + " " + c.ToString());

        }
    }

Gruß Kostas

Die Konvertierung findet statt, weil du von float auf double castest (1.1F ist float, 1.1 ist double). Daher auch die unterschiedlichen "Ergebnisse".

Die eigenfliche Frage ist, wann benötige ich überhaupt implizites konvertieren?

Wenn du zum Beispiel den Wert einer int variable in eine double speicherst.

int a = 345;
            double b;

            b = a;

Implizite Konvertierung findet statt, wenn man keinen Cast-Operator verwendet, also z.B. wie oben schreibt:

double a = 1.1F; // implizite Konversion von float nach double

Implizite Konvertierung ist konfliktfrei.

Explizite Konvertierung ist hingegen i.d.R. konfliktbehaftet (z.B. Überlauf, Rundung,etc.) und muss durch Code innerhalb der Klasse implementiert sein:

 
   public static explicit operator MyType(int i)
   {
      // code to convert from int to MyType
   }

Das wäre z.B. der umgedrehte Weg:

float a = (float) 1.1;

Original von svenson
Die Konvertierung findet statt, weil du von float auf double castest (1.1F ist float, 1.1 ist double). Daher auch die unterschiedlichen "Ergebnisse".

Ist es wirklich so selbstverständlich das der Wert
11.2 in 11.999998092651 konvertiert wird?
Ich würde es verstehen wen der Wert die Typgrenzen über steigen würde,
aber bei Werten die in beiden Typen einwandfrei hineinpassen?

Wie soll das Pappas bub verstehen?

Gruß Kostas

Liegt an der Binaerdarstellung