0

私はC#が初めてで、PHPから移行しています。構築 Interface/Collection <>を正確に意味するものがわからないことを除いて、すべてがほぼ明確です。

私はすでに「型定義」に<>を使用していますが、それが正確に何を意味するのか. 私はこのように使用しています:

class TaskComparer : IEqualityComparer<Task> ...
class TaskQueue : ConcurrentQueue<Task> ...

これに関する記事を見ましたか?リンクを投稿してください。ありがとうございました。

4

5 に答える 5

5

それは「ジェネリック」と呼ばれ、(あなたが言うように) 型パラメーターを定義する方法です。MSDN の紹介記事は次のとおりです: http://msdn.microsoft.com/en-us/library/ms172192.aspx

このユーティリティの簡単な例として、リポジトリ パターンについて考えてみましょう。

public interface IRepository<T> {
    public void Add (T obj);
    public IEnumerable<T> GetAll();
}

適切な実装により、あらゆるタイプのエンティティに対してリポジトリ インターフェイスを使用できるようになりました。

public void someMethod(IRepository<Person> personsRepo) 
{
    IEnumerable<Person> persons = personsRepo.GetAll();
    // ...
}
于 2012-06-12T06:02:21.133 に答える
2

おそらくジェネリックを意味します。

于 2012-06-12T06:02:24.910 に答える
2

識別子 < タイプの定義 >

識別子の後のブロックは、ジェネリック型定義から構築された型を示します。

この定義は再帰的です。他のジェネリック型から構築されたジェネリック型を持つことができます。配列の配列を持つことができるのと同じ方法で、リストのリスト、辞書のリストなどを構築できます。

さらに、同様の構成を使用してジェネリック関数を作成できますが、型またはインターフェイス名の代わりにジェネリック関数の名前を配置する必要があります。

独自のジェネリック型と関数の定義を作成し、それらに直接またはリフレクションを介してアクセスできます。強い型付けを他の型から構築された型に拡張するため、この概念は非常に強力です。

于 2012-06-12T06:02:44.940 に答える
0

他の人が提供するジェネリックに関する記事を読んでください。それでも、ここで簡単に紹介します。

たとえば、id 関数を書きたいとします (正確に入力を返します)。これはすべてのタイプで機能するはずですよね?したがって、私たちの素朴なアプローチは以下を使用していobjectます。

object id(object x) {
    return x
}

ただし、これはobject毎回 を返します。後で「具体的な」型に戻すには、次のように変換する必要がありますint x = (int)id(12)。ジェネリックはこの問題を解決します。タイプをパラメータ化して、まったく同じに保つことができます。

T id2<T> (T x) {
    return x
}

型シグニチャを見ると、このバージョンがanyを取り 、同じTものを返すことがわかります( を に置き換えるとわかります)。 TTint

これで簡単な概要がわかると思います。また、制約についてもお読みください。

于 2012-06-12T06:12:38.830 に答える
0

コレクションの場合、コレクション内のデータのタイプを定義します。これは、型のセキュリティを向上させる方法にすぎません。ちょっとした例:

ArrayList<Integer> test = new ArrayList<Integer>();

test.Add(1); // will work
test.Add("2");  //will throw an exception, String cannot be cast to int
于 2012-06-12T06:05:09.840 に答える