Hallo
Ich habe eine generische Klasse"Manager" die einen FileInfo oder ein DirectoryInfo erwartet.
Das funktionier alles einwandfrei wo ich ein Problem habe ist das ich eine Liste erstellen will mit Instansen dieser Klasse.
var list = new List<Manager<FileSystemInfo>>();
list.Add(new Manager<FileInfo>());
list.Add(new Manager<DirectoryInfo>());
hierbei bekomme ich ein Fehler das der Type nicht mit dem FileSystemInfo kompatibel ist. Aber Die Klasse FileSystemInfo ist die BasisKlasse beider Klassen.
Hat hierzu jemand eine Idee wie ich das Problem beheben kann.
Das müsste vllt. son thema für Framework 4.0 sein?
(Kovarianz und Kontravarianz???)
Salute zusammen
Ja, mit Ko- und Kontravarianz funktioniert das dann.
Im Moment musst du einfach den Umweg über ein nichtgenerisches Interface gehen.
Intern kannst du trotzdem noch Generics zur Hilfe nehmen.
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
Dann sollte ja
List<FileSystemInfo> list = new List<FileSystemInfo>();
list.Add(new DirectoryInfo(@"C:\");
list.Add(new FileInfo(@"C:\test");
den selben Fehler werfen, was es nicht tut. Oder irre ich mich da.
Vielleicht kannst du mal ein Auszug aus der Manager Klasse posten.
Hallo chrismoe,
du irrst dich. Der Unterschied ist, dass DirectoryInfo eine Unterklasse von FileSystemInfo ist, aber Manger<DirectoryInfo> keine Unterklasse von Manger<FileSystemInfo>.
Dabei ist es ganz egal, wie die Klasse Manager aussieht.
Siehe auch [Lösung] Problem bei Entkoppelung durch Interface.
herbivore
[...] aber Manager<DirectoryInfo> keine Unterklasse von Manager<FileSystemInfo>.
Und das ist in der Regel auch gut so! Bloß weil es in C# 4.0 geht, heißt es nicht, dass man es bedenkenlos überall pauschal einsetzen sollte ...
Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden
Ah ok! Ich sehe das Problem 😃
Danke für die Erklärung.