17.abstract class BaseClass
{
public virtual void MethodA()
{
}
public virtual void MethodB()
{
}
}
class Class1: BaseClass
{
public void MethodA(string arg)
{
}
public override void MethodB()
{
}
}
class Class2: Class1
{
new public void MethodB()
{
}
}
class MainClass
{
public static void Main(string[] args)
{
Class2 o = new Class2();
Console.WriteLine(o.MethodA());
}
}
请问,o.MethodA调用的是: (A)
A.BaseClass.MethodA
B.Class2.MethodA
C.Class1.MethodA
D.都不是
为什么选A,不太理解
我的理解:是不是因为 Class1 的MethodA()方法没有用 new 隐藏或用 override,所以才调用 BaseClass.MethodA()方法? 哪位大哥帮忙看看,最好说的详细点儿,谢啦.
16.class Class1
{
private static int count = 0;
static Class1()
{
count++;
}
public Class1()
{
count++;
}
}
Class1 o1 = new Class1();
Class1 o2 = new Class1();
请问,o1.Count的值是多少?(C)
A.1 B.2 C.3 D.4这个题我感觉是选D,哪位大哥帮忙看看,最好说的详细点儿,谢啦.
第3题:
using System;
class A
{
public A()
{
PrintFields();
} public virtual void PrintFields()
{}
}class B:A
{
int x=1;
int y;
public B()
{
y=-1;
} public override void PrintFields()
{
Console.WriteLine("x={0},y={1}",x,y);
}
}当使用new B()创建B的实例时,产生什么输出?X=1,Y=0我的理解:实例化 B 对象,先去调用 A 的构造函数,A 的构造函数调用自身PrintFields()函数,可我感觉这个函数什么也没做,类B的构造函数也没有调用PrintFields()函数,所以我感觉不执行打印函数.为什么会有打印输出? 谢大哥们帮忙.
{
public virtual void MethodA()
{
}
public virtual void MethodB()
{
}
}
class Class1: BaseClass
{
public void MethodA(string arg)
{
}
public override void MethodB()
{
}
}
class Class2: Class1
{
new public void MethodB()
{
}
}
class MainClass
{
public static void Main(string[] args)
{
Class2 o = new Class2();
Console.WriteLine(o.MethodA());
}
}
请问,o.MethodA调用的是: (A)
A.BaseClass.MethodA
B.Class2.MethodA
C.Class1.MethodA
D.都不是
为什么选A,不太理解
我的理解:是不是因为 Class1 的MethodA()方法没有用 new 隐藏或用 override,所以才调用 BaseClass.MethodA()方法? 哪位大哥帮忙看看,最好说的详细点儿,谢啦.
16.class Class1
{
private static int count = 0;
static Class1()
{
count++;
}
public Class1()
{
count++;
}
}
Class1 o1 = new Class1();
Class1 o2 = new Class1();
请问,o1.Count的值是多少?(C)
A.1 B.2 C.3 D.4这个题我感觉是选D,哪位大哥帮忙看看,最好说的详细点儿,谢啦.
第3题:
using System;
class A
{
public A()
{
PrintFields();
} public virtual void PrintFields()
{}
}class B:A
{
int x=1;
int y;
public B()
{
y=-1;
} public override void PrintFields()
{
Console.WriteLine("x={0},y={1}",x,y);
}
}当使用new B()创建B的实例时,产生什么输出?X=1,Y=0我的理解:实例化 B 对象,先去调用 A 的构造函数,A 的构造函数调用自身PrintFields()函数,可我感觉这个函数什么也没做,类B的构造函数也没有调用PrintFields()函数,所以我感觉不执行打印函数.为什么会有打印输出? 谢大哥们帮忙.
class MainClass
{
public static void Main(string[] args)
{
Class2 o = new Class2();
Console.WriteLine(o.MethodA());
}
}
class2 继承了class1,BaseClass o.MethodA()这个方法没有参数,所以用的是BaseClass的方法 所以选A
(手头没开发环境,没法试,大哥们帮忙给看看,谢啦)
=========================================
x =1 y =0new B()后首先执行
int x=1;
int y;
再执行B的构造函数时会调用基类构造函数先 于是执行
public A()
{
PrintFields();
}
而A中的PrintFields方法是virtual方法且B中已经用override关键字实现了该方法 于是会执行子类B中的PrintFields方法 Console.WriteLine("x={0},y={1}",x,y); //注意此时还没有执行到B的构造函数 所以 y值为0而后才执行到B的构造函数//此时 x=1 y =-1;
第3题 注意PrintFields是virtual 并在class B中重写。 所以实际上会调用B.PrintFields;而成员初始化代码会在构造函数之前执行,所以执行基类构造函数A()时X的值为1 而此时B()还没有执行 所以Y保持默认初始化的值0.