2016-11-28 6 views
1

次のコードは、StackOverflowサイトで見たものです。しかし、それは詳細に説明されていないし、私は理解することができません。誰もこれを説明するだろうか?このクラスの使用方法<T>

public class MyArray<T> 
{ 
    T[] array = new T[10]; 
    public T GetItem(int index) 
    { 
     return array[index]; 
    } 
} 
  1. 私はこれがクラスであるかどうかを知りたいと思います。
  2. このクラスをインスタンス化する方法は?
  3. クラスでT配列を使用するにはどうすればよいですか?
  4. クラスをクラスの外側または内側に作成する必要があるかどうか。
+3

これはジェネリックと呼ばれる:https://msdn.microsoft.com/en-us/library/512aeb7t.aspxあなたは私の第四の質問に間違いに私の目を開いた –

答えて

3

Generic classes<T>には型パラメータがあります。異なるフィールド型を持つ別々のクラスは、1つの汎用クラスに置き換えることができます。ジェネリッククラスは型パラメータを導入します。これはクラス定義自体の一部になります。実際のデータ型にコミットすることなく、タイプセーフなデータ構造を定義することができます。ジェネリックの最も一般的な使い方は、コレクションクラスを作成することです。これにより、タイプ固有のコードを複製せずにデータ処理アルゴリズムを再利用できるため、パフォーマンスが大幅に向上し、コードが高品質になります。

文字Tは、発信ロケーションに基づいてのみ既知のタイプを示します。プログラムは実際のタイプのようにTのインスタンスを処理できますが、そうではありません。

これがクラスかどうかを知りたいと思います。

はい、それは、このクラスをインスタンス化する方法クラス

のですか?

MyArray<int> = new MyArray<int>(); 

または

MyArray<string> = new MyArray<string>(); 

または他の任意のタイプは、私はクラスでT配列を使用するにはどうすればよい

が好き?

ジェネリックの一般的な使い方の1つは、コレクションクラスを作成することです。だからあなたはそのように使うこともできます。

クラスをクラスの外側または内側に作成する必要があるかどうかを確認します。

質問は、宣言クラスまたは実装クラスについてあなたが話しているクラスは少し漠然としています。しかし、クラスのオブジェクトを実装または作成するクラスについて話していると仮定します。これは、通常のオブジェクトイニシエータのようにクラスの内部にある必要があります。

+0

。ぼんやりとしたのは、私が大量のデータを処理するにもかかわらず、私の理論の理解がかなり限られているからです。 – Unnikrishnan

+0

私が提案したようにクラスを開始しようとしたときに、エラーが報告されました。だから私はMyArrayを試した番号=新しいMyArray ();. yurポストに必要な編集をしてください。これは大丈夫ですか? @Mohit Shrivastava – Unnikrishnan

1

これはgeneric classです。これは、<T>がインスタンス化されるときに型になることを意味します。たとえば、コード例に基づいて、次のようにインスタンス化します。

MyArray<int> integerArray = new MyArray<int>(); 

これは強く型付けされた整数の配列をインスタンス化します。これは、クラス全体にTを渡すことで行います。同じクラスを使用して、以下を実行して文字列を格納することができます。

MyArray<string> stringArray = new MyArray<string>(); 

この理由は、コンテナクラスに含まれる可能性のあるタイプの柔軟性を高めるためです。これはそれらをより再利用可能にする。ジェネリックの前に、動的リストが必要な場合は、ArrayListを使用してすべてをキャストしてObjectと入力し、手動でそれを元のタイプに戻す必要がありました。

List<T>,Dictionary<TKey, TValue>などの汎用クラスが多数組み込まれています。これらはSystem.Genericsモジュールにあります。

+0

これを使用してintとstringの両方がどのように作成されるかを正確に示すためにもう少し追加してください。それは貴重な助けになるでしょう! @Soviut – Unnikrishnan

+0

更新された追加情報を表示します。 – Unnikrishnan

+0

@Unnikrishnanどのように文字列とintが作成されますか?彼らは作成されていない、彼らはタイプです。 – Soviut

2

1:はい、それはクラスです。したがって、キーワードはclassです。

2:var myArray = new MyArray<Something>();Somethingは、(奇妙な例外を除いて)任意のタイプにすることができます。

3:クラス内からは、arrayを参照してください。あなたはあなたがどのようなタイプであるか分からないので、あなたはアイテム自体で多くをすることができなくなります。

4:投稿したコードは、クラス内に配列を作成します。配列は隠されており、アクセスは唯一GetItemメソッドによるものです。あなたが投稿したものは、それが有用ではないし、うまくいかないので、不完全でなければなりません。アイテムを手に入れようとする以上に多くのことができる必要があります。

+0

ああ、これらのことを知っておいてよかった。 – Unnikrishnan

1
  • これはクラスかどうかを知りたいと思います。

はいこのクラスであり、Generic Classesと呼ばれ、汎用 クラスは、特定の データ・タイプに固有でない操作をカプセル化します。ジェネリッククラスの最も一般的な使用方法は、リンクリスト、ハッシュテーブル、スタック、キュー、ツリーなどのコレクション です。 コレクションにアイテムを追加したり削除したりする操作は、 が格納されているかどうかにかかわらず、基本的に同じ方法で実行されます( )。このクラスをインスタンス化する方法

  • MyArray<int> myArrayInstance= new MyArray<int>(); 
    
  • どのように私はクラスでT配列を使用することができますか?

あなたがクラス内にそれらを使用する変数arrayの名前を使用することができます。参照を使用してクラス外からアクセスしてください。

配列はクラスで外側または内側に作成する必要があるかどうか

あなたは、クラス内の配列を取り込むことも、MyArrayというコンストラクタから移入することができます。あなたがメソッドを呼び出すために、クラスのインスタンスをmyArrayInstanceを使用することができるのGetItem

を使用する方法

public MyArray(T[] inputArrayElements) 
{ 
    array = inputArrayElements; 
} 
  • 追加ノート、次のような。呼び出しは次のようになります:

    int itemAtIndexs = myArrayInstance.GetItem<int>(5); 
    // which will give you the item @ 5th index 
    
+0

すべての回答が非常に説明されているので、すべての回答をupvoteできますか? – Unnikrishnan

0

私はそれがC#のの下のラングにある私のような役に立つ人になることを期待して、私を導い何他人に基づいて回答を投稿することを好むと何かを学んでいます新しい。

namespace GenericArray 
{ 
    public class MyArray<T> 
    { 
     T[] array = new T[5]; 
     public MyArray(int size) 
     { //Not used in this programme, because the no. of elements is already set above. 
     } 
     public void SetItem(int index, T value) 
     { 
      array[0] = value; 
     } 
     public T GetItem(int index) 
     { 
      return array[index]; 
     } 
    } 
} 

ボタンイベントでは、このように記述します。

private void button4_Click(object sender, EventArgs e) 
{ 
    MyArray<int> myInt = new MyArray<int>(5); //Initializing the generic class. 
    myInt.SetItem(0, 1); //array element 0 is going to be assigned a value of 1. 
    MessageBox.Show(myInt.GetItem(0).ToString()); 
    //You can also use the same class, to set string values. 
} 
関連する問題