Versuchen, einem Freund hier draußen zu helfen. Ich bin kein Microsoft-Programmierer.Erstellen eines Arrays, einer Liste oder einer Sammlung von untergeordneten Elementen einer abstrakten Basisklasse
public abstract class Foo {}
public class Bar : Foo {}
public class Baz : Foo {}
Das scheint ziemlich gut, dann in einer anderen Klasse zu arbeiten, er Anordnungen von Bar
instanziieren und Baz
wie diese
public class MyClass {
Bar[] Bars = new Bar[] { new Bar[] { new Bar(), new Bar() } }
Baz[] Bazs = new Baz[] { new Baz[] { new Baz(), new Baz() } }
}
die Frage, ob er will einen Accessor haben, die Foos
und Bars
zurück wie macht er das?
public class MyClass {
Bar[] Bars = new Bar[] { new Bar[] { new Bar(), new Bar() } }
Baz[] Bazs = new Baz[] { new Baz[] { new Baz(), new Baz() } }
public IEnumerable<Foo> GetFoos() {
// No go.
return [ Bars, Bazs ];
// Also No go.
List<Foo> test = new List<Foo> { Bars, Bazs };
return test;
}
}
Ich denke, dass Microsoft dies normalerweise mit Schnittstellen implementiert, aber seine Zuweisung fordert die Verwendung von abstrakten Basisklassen. Gibt es eine Möglichkeit, eine Liste oder ein Array von Kindern einer abstrakten Basisklasse zurückzugeben?
In beiden Szenarien können Sie Erstelle keine Instanz von 'new Foo()', da 'Foo' eine abstrakte Klasse ist. Sie können Objekte von Bar und Baz erstellen und ein Array von Foo zurückgeben. Sehen Sie, ob die folgende Antwort hilft. –
Es scheint ein Syntaxfehler in Ihrem Code zu sein: Um ein Array zu erstellen, benutzen Sie 'Bar [] Bars = new Bar [] {new Bar(), new Bar()}' Sie scheinen eine Art verschachteltes Array mit '' zu erstellen new Bar [] {new Bar [] {... ' – HugoRune