こんにちは。
ジェネリックについて教えてください。
インスタンスの作成部分において
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;
}
}
No.1ベストアンサー
- 回答日時:
>Playeクラスのインスタンスのなかに定義されている中身がInt型となる?
そうです
>player<int> aの <int>って何ですか?
>変数aはPLAYER型ではなくInt型になるのでしょうか?
playerの定義にある<t>という部分を明示的に型を指定しています
なので言葉で表すとするなら
Int型を指定されたplayerという名前のジェネリッククラスです
raraririruruさん
ご回答ありがとうございました。
あぁ、Class Player<t>{
INTをしていするとClass Player<INT>となるのですね。
なので、Class Player<INT>{
Player<INT>型ですね。
T型ってかっこいい名前ですね。
ターミネーターを連想してしまいました。
また、ジェネリックってジェネリック薬品かと思っちゃいましたよ。
naktakさんの回答も併せてよみよくわかりました。
なにかありましたらよろしくお願いいたします。
No.2
- 回答日時:
> 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つの変数の中に複数格納したいなー(全員の社員番号)とか
値にキーごとに値を保持したいなー(社員番号ごとに社員名)とかいう時によく使うことになります。
その時に、キーや値で許容する型は何なんですか、という形でジェネリックを利用することになります。
ジェネリック自体の理解が深まったら、先に記したページなどを参考にして、自前のジェネリッククラスを作ってみてください。
ご回答ありがとうございます。
>ジェネリックに対して基礎的なことから、深い知識を得たいなら以下ページが分かりやすいです。
>まずは『ジェネリックの利点』までを読んでください。
ありがとうございます。
-----------------
player<int> a = new player<int>();
Player<int>型でしたか。
これで同じ型のものを(参照)代入できるんだ。
そして、インスタンスが生成された時点で、Classの部分で
定義したclass player <t>の部分にINTがしめされる?
なので、変数とかがINT型としてあつかえるようになるんだ。(きっと(^_^;)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Ruby パイソンプログラミング 2 2022/12/03 18:44
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- C言語・C++・C# PC画面を録画するプログラムでdllの読み込みエラー 1 2023/04/22 08:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
long型の定数の末尾にLを付ける...
-
C++でboolにintの値を代入する...
-
分割コンパイル時に構造体....
-
C言語での方向キー入力判定
-
main.c:7:43: warning: implici...
-
関数の実体定義にヘッダファイ...
-
visualstudio C# テキストボッ...
-
構造体の宣言でエラーが出ます。
-
intとINTの違いは?
-
【#define】 defineで定義した...
-
C++の(左辺値)参照を参照渡し
-
コンパイルエラー
-
構造体の要素すべてに対する四...
-
2重定義って??
-
C言語でのフィボナッチ数列の表示
-
DLLでLIBファイルが作成されない
-
変数の型を定義しなかった場合...
-
staticで初期化した変数(?)を使...
-
C++の規格
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
long型の定数の末尾にLを付ける...
-
2重定義って??
-
visualstudio C# テキストボッ...
-
C++のfor文について
-
構造体の要素すべてに対する四...
-
typedef enumの使い方を教えて...
-
変数の型を定義しなかった場合...
-
ハンドルされていない例外が発...
-
関数の実体定義にヘッダファイ...
-
intとINTの違いは?
-
【#define】 defineで定義した...
-
C++でboolにintの値を代入する...
-
構造体の宣言でエラーが出ます。
-
main.c:7:43: warning: implici...
-
プログラムの中で別のmainを呼...
-
void func( void )について
-
エラー「invalid conversion fr...
-
C言語 宣言した変数になにも代...
-
0除算を判定したい
おすすめ情報