Ich habe Schwierigkeiten, dieses Szenario mit Casting zu verstehen. Für Demozwecke erstellt ich diese Klassen:Upcasting abgeleitete Klasse zur Basisklasse in C#
public interface IFoo {}
public class Foo : IFoo
{
public string Name { get; set; }
}
public class Bar : Foo
{
public string Surname { get; set; }
}
Nun, ich in meiner Main-Methode eine statische Methode erstellt, die IFoo zurückgibt:
class Program
{
static void Main()
{
IFoo iFoo = GetIFoo();
Foo foo = (Foo)iFoo;
//the GetType ext method is executed and it returns Bar
if(foo is Foo)
Console.WriteLine($"foo is of type: {foo.GetType()}");
Console.ReadLine();
}
static IFoo GetIFoo()
{
var bar = new Bar
{
Name = "MyName",
Surname = "MySurname"
}
return bar;
}
}
Die Frage ist: obwohl ich eine Bar bin zu schaffen in der GetIFoo-Methode, warum ist es, dass, wenn ich die IFoo zu Foo, foo Typ ist Bar und nicht Foo?
Kann der dynamische Typ Bar zur Laufzeit in Foo umgewandelt werden? – allencage
Danke, ich habe die Antwort auf meinen Kommentar gefunden. Genau das wollte ich verstehen. – allencage