zoukankan      html  css  js  c++  java
  • [转]一道关于继承的工作机制的试题

     1 using System;
     2 class A
     3 {
     4 public A()
     5 {
     6 PrintFields();
     7 }
     8 public virtual void PrintFields(){}
     9 }
    10 class B:A
    11 {
    12 int x=1;
    13 int y;
    14 public B()
    15 {
    16 y=-1;
    17 }
    18 public override void PrintFields()
    19 {
    20 Console.WriteLine("x={0},y={1}",x,y);
    21 }

    当使用new B()创建B的实例时,产生什么输出?

     虽然未证实,不过看起来应该是对的!下面是热心网友的回答。

    笨笨蜗牛答:

    输出:x=1, y=0

    原因:

    1、构造一个类的时候,先初始化类成员(先基类后派生类),x变量在定义的时候初始化了值为1

    2、调用构造函数的时候,是先运行基类的构造函数。虽然B中对y赋值为1,但是,在调用A的构造执行打印输出的时候,还没有执行这赋值语句

    3、在.NET中,要求变量先赋值后使用,这个是为了安全,并非绝对。任何类型的变量在未赋值前都有一个默认的初始值,数值类型的初始值是0.、

    来源:http://q.cnblogs.com/q/38201/

  • 相关阅读:
    读取xml文件到实体
    dev常用控件的属性
    委托和事件
    GridControl应用
    关于DataTable的处理
    SQL2
    xaml地址写法
    sql临时表的创建及赋值
    wpf 图片缩放
    NIO简介
  • 原文地址:https://www.cnblogs.com/seasons1987/p/2573424.html
Copyright © 2011-2022 走看看