Şu anda C# içinde varoluşsal türleri kullanarak çözülebileceğini düşündüğüm bir sorunla karşı karşıyayım. Ancak, C# 'da yaratılıp yaratılamayacaklarını ya da simüle edildiklerini (başka bir yapı kullanarak) gerçekten bilmiyorum. Ama neler tür parametresi önemsemedenVarolan türleri C#?
public interface MyInterface<T>
{
T GetSomething();
void DoSomething(T something);
}
public class MyIntClass : MyInterface<int>
{
int GetSomething()
{
return 42;
}
void DoSomething(int something)
{
Console.Write(something);
}
}
public class MyStringClass : MyInterface<string>
{
string GetSomething()
{
return "Something";
}
void DoSomething(string something)
{
SomeStaticClass.DoSomethingWithString(something);
}
}
İleri Bu arabirim uygulamak nesneler listesi üzerinden yineleme edebilmek istiyorum:
Temelde bu gibi bazı kod sahip olmak istiyorum. Böyle bir şey:
public static void DoALotOfThingsTwice(){
var listOfThings = new List<MyInterface<T>>(){
new MyIntClass(),
new MyStringClass();
};
foreach (MyInterface<T> thingDoer in listOfThings){
T something = thingDoer.GetSomething();
thingDoer.DoSomething(something);
thingDoer.DoSomething(something);
}
}
MyIntClass
kullandığı T
ve MyStringClass
tarafından kullanılan bir farklı olduğu için bu derleme değil.
Böyle bir şey hile yapabileceğini düşünüyordum, ama C# bunu geçerli bir yol varsa ben bilmiyorum:
public static void DoALotOfThingsTwice(){
var listOfThings = new List<∃T.MyInterface<T>>(){
new MyIntClass(),
new MyStringClass();
};
foreach (∃T.MyInterface<T> thingDoer in listOfThings){
T something = thingDoer.GetSomething();
thingDoer.DoSomething(something);
thingDoer.DoSomething(something);
}
}
gibi, hayır, bu mümkün değil: Şimdilik
, bunun olası çözüm olması gerektiğine inanıyoruz. – Servy
İşlemi bir 'Eylem 'içine sarın ve ardından bunları bir listede saklayabilirsiniz. Bu eylemleri genel olarak oluşturabilirsiniz. – Lee