電子書籍の厳選無料作品が豊富!

こんにちは。

ジェネリックについて教えてください。

インスタンスの作成部分において

player a = new player();
Player型の変数aのなかにPlayerクラスのインスタンスを代入という認識

player<int> a = new player<int>();
右辺:Playeクラスのインスタンスのなかに定義されている中身がInt型となる?
   (この場合ValueがINT型)
左辺:player<int> aの <int>って何ですか?
    変数aはPLAYER型ではなくInt型になるのでしょうか?

宜しくお願いいたします。
----------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ジェネリック
{
class Program
{
static void Main(string[] args)
{
player<int> a = new player<int>();
a.value = 2;
Console.WriteLine(a.value);
}
}
class player <t>
{
public t value;
}
}

A 回答 (2件)

>Playeクラスのインスタンスのなかに定義されている中身がInt型となる?


そうです

>player<int> aの <int>って何ですか?
>変数aはPLAYER型ではなくInt型になるのでしょうか?
playerの定義にある<t>という部分を明示的に型を指定しています
なので言葉で表すとするなら

Int型を指定されたplayerという名前のジェネリッククラスです
    • good
    • 0
この回答へのお礼

raraririruruさん
ご回答ありがとうございました。
あぁ、Class Player<t>{
INTをしていするとClass Player<INT>となるのですね。
なので、Class Player<INT>{
Player<INT>型ですね。 

T型ってかっこいい名前ですね。
ターミネーターを連想してしまいました。
また、ジェネリックってジェネリック薬品かと思っちゃいましたよ。
naktakさんの回答も併せてよみよくわかりました。
なにかありましたらよろしくお願いいたします。

お礼日時:2019/03/02 12:24

> Playeクラスのインスタンスのなかに定義されている中身がInt型となる?


正確には違います。
Playerクラス内でジェネリックとして定義した変数や引数、戻り値の型などがint型となります。
つまり、ジェネリッククラスのくせに、そのクラス内でジェネリックを一切利用していなかったら、何の意味もないジェネリッククラスになります。

> player<int> aの <int>って何ですか?
ジェネリックをintとすることを示します。

> 変数aはPLAYER型ではなくInt型になるのでしょうか?
Player<int>型です。

質問の例であれば、a.value = 2;の部分に、int型ではない、文字などを入力するとエラーになります。
それはジェネリックとしてintを指定していることによって、value変数の型はintとなっているからです。

ですから、以下のコードはジェネリックとしてstringを指定しているのでエラーになります。
player<string> a = new player<string>();
a.value = 2;


今の知識量で、まずは自前のジェネリッククラスを作らない方がいいと思います。

ジェネリックに対して基礎的なことから、深い知識を得たいなら以下ページが分かりやすいです。
まずは『ジェネリックの利点』までを読んでください。
それ以降はまだ読まないほうがいいです。
https://ufcpp.net/study/csharp/sp2_generics.html

そして、List<T>やDictionary<TKey, TValue>あたりを使って、ジェネリックの意味をちゃんと理解して、慣れ親しんだ方がいいです。
https://docs.microsoft.com/ja-jp/dotnet/api/syst …
https://docs.microsoft.com/ja-jp/dotnet/api/syst …

値を1つの変数の中に複数格納したいなー(全員の社員番号)とか
値にキーごとに値を保持したいなー(社員番号ごとに社員名)とかいう時によく使うことになります。
その時に、キーや値で許容する型は何なんですか、という形でジェネリックを利用することになります。


ジェネリック自体の理解が深まったら、先に記したページなどを参考にして、自前のジェネリッククラスを作ってみてください。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

>ジェネリックに対して基礎的なことから、深い知識を得たいなら以下ページが分かりやすいです。
>まずは『ジェネリックの利点』までを読んでください。

ありがとうございます。
-----------------
player<int> a = new player<int>(); 
Player<int>型でしたか。
これで同じ型のものを(参照)代入できるんだ。
そして、インスタンスが生成された時点で、Classの部分で
定義したclass player <t>の部分にINTがしめされる?
なので、変数とかがINT型としてあつかえるようになるんだ。(きっと(^_^;)

お礼日時:2019/02/28 18:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!