私は現在、C#の問題に直面しています。実在のタイプを使用して解決できると思います。しかし、私はC#で作成できるのか、(他のいくつかの構造を使って)シミュレートされているのかどうかは分かりません。が、それが持っているどのような種類のパラメータ気にせず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);
}
}
次の私は、このインターフェイスを実装するオブジェクトのリストを反復することができるようにしたい:
は基本的に私はこのようないくつかのコードを持っていると思います。このような何か:
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
で使用T
とMyStringClass
で使用されるものが異なるので、これはコンパイルされません。
私はこのような何かがトリックを行うことができると考えていたが、C#でそうする有効な方法があるかどうかはわからない:
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);
}
}
タイプが不変であるため、いや、それができないのです。 – Servy
'Action'で操作をラップし、それらをリストに格納することができます。これらのアクションは一般的に作成できます。 – Lee