Arabirim ve arabirimi uygulayan iki sınıfım var. Sınıflar genel tiplere sahiptir. Bir sınıfın örneğinden diğerine kopyalamak istiyorum.C# Genel Kopya Kurucu
interface IFoo
{
// stuff
}
class Foo<T> : IFoo
{
// foo stuff
// ifoo implementation
}
class Bar<T> : IFoo
{
// bar stuff
// ifoo implementation
}
Bir Foo'm var ve bir Bar istiyorum. Bar IFoo bir parametre alarak bir kopya kurucu vardır. Ben klon uygulamaya bir uzantısı yöntemi oluşturuldu: uzatma yöntemi değiştirerek yöntemi çağrılırken türünü ilan atlamak için bir yolu var mı
someFoo.Clone<T> ...
: yöntemin çağrılması
public static Bar<T> Clone<T>(this IFoo foo)
{
return new Bar<T>(foo);
}
türünü gerektirir ya da başka herhangi bir şekilde, vakanın temel türünü umursamadan geçmesine izin vermek için?
Güncelleştirme Bu, durumu daha iyi göstermek için nasıl kullanılmakta olduğunu gösterir.
Bir yöntemde bir koleksiyon yineliyorum ve bir IFoo numarasına dönün. Yöntemde, kaynak koleksiyonunun bir niteliğine bakıyorum ve Foo'nun türünü belirledim.
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;
Arama yönteminin bir listesi vardır. Daha sonra, bu listeden kullanım için tek tek öğeleri seçiyorum, bu noktada Foo yerine bir Bar istiyorum. Listeden seçerken, örnekler yalnızca "bu IFoo foo" için uzantı yöntemlerini gördükleri gibi IFoo tipindedir. IFoo'yu bir Foo'ya dökmek istemiyorum. Bu, T. tipini yeniden ilan etmeyi gerektirecektir. Sadece Foo'nun Bar'a ne olduğunu söylemek istiyorum. Mümkün mü?
Yardımcı olurum Belki de bir şey özlüyorum, ama eğer ur uzantısı fonksiyonu bir IFoo al, bu Foo türünde bir Bar içine "Klonla" nasıl gerekiyor? –
Tek düşündüğüm, IFoo özelliklerinin Foo'dan Bar'a kopyalanan değerleridir. – blu