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();
}
}
我发现自己的例子,我卡住了。我知道这会打印:C#类继承和一个简单的例子
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
。我明白了。但为什么在下一次呢?难道不是18岁?
调试程序。逐行查看它们是如何影响给定变量的。这应该使大部分操作清楚。 – Servy
请不要写这样的真实代码。这是OO意大利面条。 –
以及字段和方法名称等不是真的有帮助... – gsharp