teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

2017/08/24 09:16

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -11,6 +11,17 @@
11
11
  言葉で言っても伝わりにくいと思うので、以下のような感じです。
12
12
 
13
13
  ```C#
14
+ clas SampleClass
15
+ {
16
+ public int x;
17
+ public int y;
18
+
19
+ overrode public string ToString()
20
+ {
21
+ return x.ToString() + y.ToString();
22
+ }
23
+ }
24
+
14
25
  void Bar<T>(T a)
15
26
  {
16
27
  Console.WriteLine(a.ToString());
@@ -26,7 +37,7 @@
26
37
  {
27
38
  myDelegate<int>(1);
28
39
  myDelegate<string>("sssss");
29
- myDelegate<Object>(null);
40
+ myDelegate<SampleClass>(new SampleClass{x=1, y=1});
30
41
  }
31
42
 
32
43
  void Hoge()
@@ -37,4 +48,7 @@
37
48
  ```
38
49
 
39
50
  上記のようなことをするための良い方法はないでしょうか。
40
- よろしくお願い致します。
51
+ よろしくお願い致します。
52
+
53
+ <補足>
54
+ 質問がよくなかったので、`SampleClass`というのを追加しました。

2

コードを修正

2017/08/24 09:16

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -4,7 +4,7 @@
4
4
  C#にて、ジェネリックな引数を持つデリゲートを以下のように定義します。
5
5
 
6
6
  ```C#
7
- delegate void BarDelegate<T>(T arg);
7
+ delegate void MyDelegate<T>(T arg);
8
8
  ```
9
9
 
10
10
  このデリゲートを引数として持つメソッドを定義し、そのメソッド内でジェネリックにデリゲートを使用したいです。しかし、うまくいきません。
@@ -22,11 +22,11 @@
22
22
  }
23
23
 
24
24
  // これはコンパイルが通らない
25
- void Foo(BarDelegate barDelegate)
25
+ void Foo(MyDelegate myDelegate)
26
26
  {
27
- barDelegate<int>(1);
27
+ myDelegate<int>(1);
28
- barDelegate<string>("sssss");
28
+ myDelegate<string>("sssss");
29
- barDelegate<Object>(null);
29
+ myDelegate<Object>(null);
30
30
  }
31
31
 
32
32
  void Hoge()

1

コードを詳細にした

2017/08/23 13:57

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -11,6 +11,16 @@
11
11
  言葉で言っても伝わりにくいと思うので、以下のような感じです。
12
12
 
13
13
  ```C#
14
+ void Bar<T>(T a)
15
+ {
16
+ Console.WriteLine(a.ToString());
17
+ }
18
+
19
+ void Baz<T>(T a)
20
+ {
21
+ Console.WriteLine(a.GetType().ToString());
22
+ }
23
+
14
24
  // これはコンパイルが通らない
15
25
  void Foo(BarDelegate barDelegate)
16
26
  {
@@ -18,6 +28,12 @@
18
28
  barDelegate<string>("sssss");
19
29
  barDelegate<Object>(null);
20
30
  }
31
+
32
+ void Hoge()
33
+ {
34
+ Foo(Bar);
35
+ Foo(Baz);
36
+ }
21
37
  ```
22
38
 
23
39
  上記のようなことをするための良い方法はないでしょうか。