私はインターフェイスとジェネリックで遊んできました。C#一般的な略語とアップキャスティング
私が欲しいのはFoo<T>
を簡略化することですFoo<T, int>
これは合理的ですか?次のことはそれを受け入れる方法ですか?私の実際の質問は...ある何
using System.Diagnostics;
namespace MyNamespace
{
public class Foo<T> : Foo<T, int> where T : class
{
}
public class Foo<T, U> where T : class
{
public void Bar()
{
Debug.WriteLine("this: " + GetType().Name + ", T: " + typeof(T).Name + ", U: " + typeof(U).Name);
}
}
class Program
{
static void Main(string[] args)
{
var fooT = new Foo<string>();
var fooTU = new Foo<string, int>();
fooT.Bar();
fooTU.Bar();
}
}
}
があることも可能T
は同じタイプですFoo<T>
からFoo<T, int>
からアップ(ダウン?)キャストへ。これを言うことは理にかなっているのでしょうか、それとも共変反(これはまだ私を逃しています)と関係していますか?
私には、幾分無知な人間、この例ではFoo<string>
とFoo<string, int>
は同じタイプですが、もちろん((Foo<string>) fooTU).Bar();
は機能しません!
あなたの "実際の質問"が*クラス* 'Foo'と 'Foo 'についてのみであれば、できるだけあなたのサンプルを減らすのに役立ちます。実際にインターフェイスに興味がある場合は、それらがあなたの質問にどのように関係しているかを明確にしてください。 –