Ich habe eine Schnittstelle und zwei Klassen, die die Schnittstelle implementiert. Die Klassen haben generische Typen. Ich möchte von einer Instanz einer Klasse zur anderen klonen.C# Generic Copy Konstruktor
interface IFoo
{
// stuff
}
class Foo<T> : IFoo
{
// foo stuff
// ifoo implementation
}
class Bar<T> : IFoo
{
// bar stuff
// ifoo implementation
}
Ich habe ein Foo und möchte eine Bar. Bar hat einen Kopierkonstruktor, der einen Parameter von IFoo verwendet. Ich habe eine Erweiterungsmethode den Klon zu implementieren:
public static Bar<T> Clone<T>(this IFoo foo)
{
return new Bar<T>(foo);
}
Aufruf der Methode erfordert die Art:
someFoo.Clone<T> ...
Gibt es eine Möglichkeit, die Art zu verzichten erklärt beim Aufruf der Methode durch die Erweiterungsmethode Modifizieren oder auf andere Weise, damit die Instanz einfach übergeben werden kann, ohne sich um den zugrunde liegenden Typ zu kümmern?
aktualisieren Hier ist, wie diese besser genutzt wird, um die Situation zu erläutern.
In einer Methode ich eine Sammlung iterieren und eine Aufzählung von IFoo zurückgeben. In der Methode betrachte ich ein Attribut der Quellsammlung und bestimme den Typ des Foo.
IFoo foo = null;
string type = element.Attribute("Type").Value;
switch (type)
{
case "int":
foo = new Foo<int>();
break;
case "string":
foo = new Foo<string>();
break;
// etc
}
// other stuff
yield return foo;
Die aufrufende Methode hat eine Liste. Später wähle ich einzelne Gegenstände aus dieser Liste aus, an denen ich statt eines Foo eine Bar hätte. Bei der Auswahl aus der Liste sind die Instanzen vom Typ IFoo, da sie nur die Erweiterungsmethoden für "dieses IFoo foo" sehen. Ich möchte den IFoo nicht zu einem Foo umwandeln, das würde erfordern, den Typ von T neu zu deklarieren. Ich möchte nur, dass Foo Bar sagt, was es ist. Ist das möglich?
Vielleicht vermisse ich etwas, aber wenn yo Deine Extension-Funktion nehme einen IFoo, wie soll er ihn in einen Bar "klonen", wenn er vom Typ Foo ist? –
Alles, was mir wichtig ist, sind die Werte in den IFoo-Eigenschaften, die von einem Foo in einen Balken kopiert werden. – blu