Ich habe den folgenden Code mit dem expliziten Guss a = (Class2)o
Implizite gossenen Referenztyp
using System;
class Class1 { }
class Class2 : Class1{ }
class IsTest
{
static void Test(object o)
{
Class1 a;
Class2 b;
if (o is Class2)
{
Console.WriteLine("o is Class2");
a = (Class2)o; // Works
a = o; // **implicit cast won't work - error CS0266**
}
}
static void Main()
{
Class1 c1 = new Class1();
Class2 c2 = new Class2();
Test(c2);
}
}
Als ich implizite Umwandlung versucht, bin a = o es mir den Fehler CS0266 gibt. Von dem, was ich weiß, ist das Konvertieren eines Referenztyps in eine direkte oder indirekte Vorgängerklasse eine Erweiterung, so dass ein Programm die Konvertierung implizit durchführen kann.
b ist von a abgeleitet, also warum die implizite Umwandlung nicht funktioniert?
http://ideone.com/5FH8bt - es funktioniert – zerkms
Ja, es funktioniert mit der ausdrücklichen Wirf a = (Class2) o, aber nicht mit dem impliziten a = o. – k1gabi
mit System; Klasse Class1 {} Klasse Class2: Class1 {} Klasse IsTest { static void Test (Objekt o) { Class1 a; Klasse2 b; if (o ist Class2) { Console.WriteLine ("o ist Class2"); a = o; // implizite Umwandlung wird nicht funktionieren - Fehler CS0266 } } static void Main() { Class1 c1 = new Class1(); Klasse2 c2 = neue Klasse2(); Test (c2); } } } – k1gabi