public class A {
public static int a = 12;
public virtual int g() { a--; return h(); }
public virtual int h() { a--; return i(); }
public int i() { return --a; }
}
class B : A {
public int b = 12;
public override int h() { b++; return (a--) + (b++); }
public new int i() { return this.g(); }
static void Main(string[] args) {
Console.WriteLine("A: {0} {1} {2}", new A().g(), new A().h(), new A().i());
Console.WriteLine("B: {0} {1} {2}", new B().g(), new B().h(), new B().i());
Console.ReadLine();
}
}
私は自分自身の例を見つけて、立ち往生しています。私はそれが印刷されることを知っています:
A: 9 7 6
しかし、なぜそれが印刷されるのかわかりません:
B: 18 17 15
A
レーンで12 を取り、g()
11 にし、それを押して、h()
10 にi()
し、他の場所に行く前に 9 にします。だからA
、確かに : 9 です。それからまた同じことなので、9 7 と 6 です。ただし、B
: では、既存の a (現在は 6) を取り、g()
5 にします。その後、b
は 13 にインクリメントされ、5+13=18 になります。その後、a = 5
に変わります。私は理解しています。しかし、なぜ次の 17 で再び 17 になるのでしょうか。18歳じゃないの?a = 4
b = 14