キャストにジェネリック型を使用したいのですが、これを行う簡単な方法はありますか? 次に例を示します。
var resource = viewBase.getAnyInstance(resourceName) as T;
ここで、T は既存の型の 1 つです。
任意の提案をいただければ幸いです。
キャストにジェネリック型を使用したいのですが、これを行う簡単な方法はありますか? 次に例を示します。
var resource = viewBase.getAnyInstance(resourceName) as T;
ここで、T は既存の型の 1 つです。
任意の提案をいただければ幸いです。
Aは、何を操作しているかについて明確で簡潔な知識がなくても、Generic
複数のタイプの を処理するための優れた方法です。とObjects
を使用するときに発生する可能性のあるいくつかの問題を軽減できるため、それ自体でかなりの柔軟性が生まれます。Boxing
Unboxing
わかりやすくするGenerics
ために、例を使用しますList
。ほとんどの場合、少なくとも私にとっては、本当に固まっCasting
たからGenerics
です。
Cast
問題は、その間にしようとした場合、List Generics
すぐにわかります...できません。
この例では Shapes を使用するので、理論上は 3 つのクラスがあります。
クラス:
あなたが学んだとき、Casting
これは非常に簡単です。
int i = 10;
string j = "I have ";
string d = j + (string)i;
そして、あなたはあなたをに変換variable i
しましたString
。タイプが適合する限り。大丈夫です。そうでない場合は、例外が発生します。
導入Generics
するとすぐに変わります。
さて、上で見たように、Classes
を表す3 つがありShapes
ます。これで、 aは技術的にはそれらによって継承されるはずShape
の commonになります。したがって、から継承することはできません。それは定量的であり、もっともらしいようです。しかし、そうではありません、なぜですか?Object
Shapes
List<Square>
List<Circle>
これConstructed Type
は、データの変換が行われる によるものです。
したがって、場合によっては、あるデータから別のデータに転送List
するために a を記述する必要があります。Loop
List
したがって、これはGenerics
非常に役立つ場所です。
// Square List:
List<Square> lSq = new List<Square>();
lSq.Add(new Square("Red Square"));
lSq.Add(new Square("Blue Square"));
Square List
オブジェクトを保持する を作成しました。
// Generic Shape
List<Shape> shp = lSq.ConvertAll(
new Converter<Square, Shape>(lSqToshp));
実際には、これらの値に aGeneric
をCast
直接 newに使用しましたList
。
さて、それはあなたの質問ではないことを理解しています。あなたの質問:
キャストにジェネリック型を使用したいのですが、これを行う簡単な方法はありますか?
簡単に言えば、はい。ただし、バリエーションは目的と使用法によって異なります。あなたはそれがAbstract Class
.
さて、あなたは次のようなことをしようとしています:
public void SomeMethod(object caller)
{
someClass<T> info = caller as someClass<T>;
if (info != null)
{}
}
それCasting
はAbstract Class
.
var detail = (SomeClassBase)viewBase.getAnyInstance(detailName);
たくさんのバリエーションがあります。
あなたの漠然とした質問に似た投稿がここにあります。詳細については、別の投稿をご覧ください。すでに知られている を渡そうとするObject
場合、呼び出し元を直接使用しないのはなぜですか?
残念ながら、あなたの質問には、より良い回答を得るために、より詳細な情報が必要になります。しかし、理解に苦しむようですねGenerics
。