C#类继承和一个简单的例子

时间:2013-06-26 15:21:12

标签: c# class

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 = 4b = 14。我明白了但是为什么下一个又一次呢?不应该是18岁吗?

3 个答案:

答案 0 :(得分:4)

主要区别在于class A member astatic,这意味着class A的每个实例共享相同的值,而class B使用实例变量b,该变量重置为每个新实例的默认值(12)。

答案 1 :(得分:1)

调用B().g()正在创建一个新的b变量,将其值设置为12,因为您要创建一个新的B对象。

h()内,b++将值设置为13和
return (a--) + (b++)返回17,因为ab值为4和13。

答案 2 :(得分:0)

首先让我们开始逐步阅读源代码。我们先来看看A班。

  • 它有一个名为a的静态整数变量,其值为12
  • 有三种功能g(), h()i()
  • 功能g()a减少一个并调用h()现在a的值为11。
  • 功能h()a减少一个并调用i()现在a的值为10.
  • 函数i()a减一,并返回a现在返回的a的值为9.

现在让我们剖析B类。

  • 它从A类延伸。
  • 它有一个名为public (non static)的{​​{1}}整数变量,其值为12。

好的,你发现一个是静态而另一个不是。这意味着所有b个对象从扣除的值继续,并且所有A个对象在每个对象创建时使用重置的值。这就是你所犯的错误。