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
车道上,它g()
需要 12 并变成 11,然后将其推到h()
- 然后是 10,i()
甚至在它去其他任何地方之前就变成了 9。所以肯定是A
:9。然后它又是同样的东西,所以它是 9 7 和 6。但是在B
: 它采用现有的 a(现在是 6)并将g()
其设为 5。然后b
递增到 13,然后 5+13=18。它变为a = 5
之后a = 4
和b = 14
。我明白了。但是为什么下一部又是17呢?不应该是18岁吗?