2008-09-17 14 views
13

私は自分の仕事で.NETジェネリックを一度も使ったことはありませんが、かなり普及していると私は理解しています。誰かがそれを学ぶための良いリンクや提案をしていますか?ボーナスとして。 .NETジェネリックコレクションが何であるか、彼らが何をしているのかはっきりと分かりません。.NETの通常のコレクションよりも大きな利点にどのように役立つかについて実践的な例がありますか?.NETジェネリックスを学ぶのに最適なリソースですか?

答えて

10

当然の選択...ジェフリー・リヒターのC#を経由して

MSDN C# Generics

5

CLRはジェネリックについての深さになり、すべての.NET開発者が所有し、読むべき貴重な資源の一つです。

1

C++テンプレートを使ったことがある人は、.NETジェネリックはほぼ同じことです。それらは同じような< T>構文を使用します。

あなたがC++を知らなくても、これはおそらくコレクションよりも難しくなります。それらは他のコレクションとまったく同じですが、それらを作成するときには< <の内部に型名を指定するので、コンパイラはどのような種類のアイテムを保持しているか知っています。

0

C#3.0 in a Nutshellは、肥大化することなくコンセプトを把握するのに十分な例を持つ素晴らしい参考書です。

-4

私の投票はあなただけでそれらを避けることができ、主にIS-:)ジェネリック医薬品のための

主な利点は、あなたがどんな意味がありませんので、内部キャストやって終わるならば、鋳造を保存することです。この問題を調べようとすると、ほとんどの場合、ジェネリックの候補は、そのような利益のために内部的にネイティブストレージを作成できるコレクション/セットであることがわかります。一方、他のほとんどのコンポーネントでは、パフォーマンスがほとんどまたはまったく得られず、インターフェイスの継承実装と比較して大幅に柔軟性が低下します。

キャスティングは、そんなにあなたはIronPythonのような動的言語を検討するための多分時間をあなたを悩ます場合:)

アンドあなたが本当にシナリオに遭遇した場合、あなたは、一般的なメイクセンスを考えて、別の質問として、それを投稿し、ここでは頭脳が一緒に見える場合とケースを解決することができます:)

更新:Yepコンパイラのチェックはいいですが、キャッスルプロジェクトのソースをチェックすると、あなたができないためにジェネリック型が途中で取得する多くの状況を見ることができますIBusinessObjectのようなキャストメイキングは、BusinessObjectよりもはるかに柔軟性があります。なぜなら、BusinessObjectから継承したものをBusinessObjectにキャストすることはできないし、 nは継承されます。通常、コードはBusinessObjectBase - > BusinessObject - > Your actual classのようになります。だからこそ、ジェネリックを使うのは必ずしも有益ではないと思うのですが、私はそのような実装を濫用して、まったく素敵ではないジェネリックなタイプの面白い機能をたくさん持っている人の一人でした。

更新#2:ボクシング/アンボクシングは、抽象型(オブジェクトなど)を使用して値を格納し、強力な型付き値を使用して再度格納する必要があることを意味します(キャストが必要です)。私が述べた収集状況とは別に多くの違いを見ることができます。このようなANDコードはまだボクシングを行います:

public T GetValue<T>() { 
    return (T) ...; 
} 

それは私が最もよく見た一般的な虐待です。人々はここでネイティブタイプを扱っていると思っていますが、実際はそうではありません。代わりに、それらは汎用構文にキャストするだけです。本当に理にかなっているのは次のとおりです。

public class MyList<T> 
{ 
    private List<T> _list; 
... 
public T GetValue(int index) 
{ 
    return _list[index]; 
} 

それから私たちのコレクションストレージに戻ってきます。それは私が収集保管の後に言った理由のため、私はたくさんの一般的な助けを得ることができません。このチュートリアルから参照 は:http://en.csharp-online.net/Understanding_Generics—Revisiting_Boxing_and_Unboxing

+1

あなただけのコレクションよりも多くを行うことができます。そして、あなたは 'ボクシング'について聞いたことはありません。キャストを避けることから得られるのは、単なるパフォーマンスだけではありません。コンパイラによる型の安全性は本当に素晴らしいです。 –

0

私はそれが現実世界の多くの例が含まれているようWROXのプロフェッショナル.NET 2.0ジェネリックは非常に有用であることが判明しました。ジェネリックスは初心者には混乱を招くかもしれませんが、経験豊かな開発者の手元にある非常に便利で強力なツールです。個人的には、.NET Genericsはコレクションの定義と使用を簡素化する上で最も役に立ちます。ジェネリックスを使用すると、ボクシング/アンボクシングタイプの変換に通常伴うパフォーマンスの低下を最小限に抑えることができるため、より効率的なコードにつながる可能性があります。

関連する問題