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

回答編集履歴

1

回答の途中がなぜか消えていたので追記

2021/06/17 05:32

投稿

nobkz
nobkz

スコア320

answer CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  それだと回答としてあんまりなので、すこし回答しておくと、そもそもメソッドが再帰になるパターンを考えてみると、
8
8
 
9
- ```
9
+ ```cs
10
10
  class A {
11
11
  void a(){
12
12
  a(
@@ -14,9 +14,33 @@
14
14
  }
15
15
  ```
16
16
 
17
+ とa()の定義中にa()が呼び出されていて、自分自身と同じメソッドだからこそ再帰になりえるわけです。
17
18
 
19
+ ```cs
20
+ class Sample {
21
+ static void Main(){
22
+ new Sample();
23
+ }
24
+ }
25
+ ```
18
26
 
19
27
 
28
+ という形です。つまりMain()というメソッドの定義中に、Sample()というコンストラクタ(これも特殊なメソッドです)が呼び出されていて、つまり異なるメソッドを呼び出しているからこそ、再帰にならないわけです。
29
+
30
+ 注意しておきたいのが、Sample()の定義は省略されているということです。つまりSample()はSample()と別の場所で定義されています。つまりこういうことです。
31
+
32
+ ```cs
33
+ class Sample {
34
+ public Sample(){
35
+ }
36
+ static void Main(){
37
+ new Sample();
38
+ }
39
+ }
40
+ ```
41
+ このことからも、Main()とSample()が異なるメソッドだということが分かります。
42
+ また、class Sample{ }と、public Sample(){ }自体も混同してる可能性があるので、これらも確り区別して考えてください。
43
+
20
44
  > そのメリット等が知りたいです。
21
45
 
22
46
  ぶっちゃけ、短く書ける以外に特に無いように思います。