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

回答編集履歴

2

追記

2019/05/17 09:41

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -44,4 +44,49 @@
44
44
  }
45
45
  }
46
46
  }
47
+ ```
48
+
49
+ # 追記
50
+
51
+ また、元の書き方に従えばこのようになります。
52
+
53
+ ```C#
54
+ using System;
55
+
56
+ namespace ConsoleApp1
57
+ {
58
+ class Program
59
+ {
60
+ static void Main(string[] args)
61
+ {
62
+ var class1 = new Class1()
63
+ {
64
+ A = 100
65
+ };
66
+ var class2 = new Class1.Class2(class1);
67
+ class2.Func1();
68
+ Console.ReadKey();
69
+ }
70
+ }
71
+
72
+ public class Class1
73
+ {
74
+ public int A { get; set; }
75
+
76
+ public class Class2
77
+ {
78
+ public Class2(Class1 owner)
79
+ {
80
+ Owner = owner;
81
+ }
82
+
83
+ public Class1 Owner { get; }
84
+
85
+ public void Func1()
86
+ {
87
+ Console.WriteLine(Owner.A);
88
+ }
89
+ }
90
+ }
91
+ }
47
92
  ```

1

追記

2019/05/17 09:41

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -1,2 +1,47 @@
1
1
  a はインスタンスメンバーなのでインスタンスが無いとアクセスできません。
2
- Class2 を作成するときに Class1 のインスタンスを渡してそれを保持するようにしてください。
2
+ Class2 を作成するときに Class1 のインスタンスを渡してそれを保持するようにしてください。
3
+
4
+ #追記
5
+
6
+ C# ではメソッドの中でクラスを拡張することができないので、次のようになります。
7
+ 実行してみるとわかりますが、this はあくまで MainActivity を差します。
8
+
9
+ ```C#
10
+ using System;
11
+
12
+ namespace ConsoleApp1
13
+ {
14
+ class Program
15
+ {
16
+ static void Main(string[] args)
17
+ {
18
+ var mainActivity = new MainActivity()
19
+ {
20
+ A = 200
21
+ };
22
+ mainActivity.CreateOnClickListenerForWeb("URL").OnClick(100);
23
+ Console.ReadKey();
24
+ }
25
+ }
26
+
27
+ public class MainActivity
28
+ {
29
+ public int A { get; set; }
30
+ public OnClickListener CreateOnClickListenerForWeb(string url)
31
+ {
32
+ return new OnClickListener()
33
+ {
34
+ OnClick = v =>
35
+ {
36
+ Console.WriteLine($"thisClass: {this.GetType().Name}, v: {v}, A: {A}");
37
+ }
38
+ };
39
+ }
40
+
41
+ public class OnClickListener
42
+ {
43
+ public Action<int> OnClick { get; set; }
44
+ }
45
+ }
46
+ }
47
+ ```