using System;
class A
{
public virtual void F() { Console.WriteLine("A.F"); }
}
class B: A
{
public override void F() { Console.WriteLine("B.F"); }
}
class C: B
{
new public virtual void F() { Console.WriteLine("C.F"); }
}
class D: C
{
public override void F() { Console.WriteLine("D.F"); }
}
class Test
{
static void Main() {
D d = new D();
A a = d;
B b = d;
C c = d;
a.F();
b.F();
c.F();
d.F();
}
}
输出:
B.F
B.F
D.F
D.F1 为什么a.,b,c要实例化d的对象?实际应用中也经常见到这种用法,不知是为什么?
因为我们一般都是 A a=new A();这么用,为什么要A a=new B()呢?这样做有什么用途?2 解释一下输出结果为什么是这样?我感觉既然是都实例化了D的对象d,那么d.F()就都
应该是:
D.F
D.F
D.F
D.F
请教高手,给解释一下上面的问题,感谢!!!
class A
{
public virtual void F() { Console.WriteLine("A.F"); }
}
class B: A
{
public override void F() { Console.WriteLine("B.F"); }
}
class C: B
{
new public virtual void F() { Console.WriteLine("C.F"); }
}
class D: C
{
public override void F() { Console.WriteLine("D.F"); }
}
class Test
{
static void Main() {
D d = new D();
A a = d;
B b = d;
C c = d;
a.F();
b.F();
c.F();
d.F();
}
}
输出:
B.F
B.F
D.F
D.F1 为什么a.,b,c要实例化d的对象?实际应用中也经常见到这种用法,不知是为什么?
因为我们一般都是 A a=new A();这么用,为什么要A a=new B()呢?这样做有什么用途?2 解释一下输出结果为什么是这样?我感觉既然是都实例化了D的对象d,那么d.F()就都
应该是:
D.F
D.F
D.F
D.F
请教高手,给解释一下上面的问题,感谢!!!
using System;
class A
{
public virtual void F() ;
}
class B: A
{
public override void F() { Console.WriteLine("B.F"); }
}
class C: B
{
new public virtual void F();
}
class D: C
{
public override void F() { Console.WriteLine("D.F"); }
}
class Test
{
static void Main() {
D d = new D();
A a = d;
B b = d;
C c = d;
a.F();
b.F();
c.F();
d.F();
}
}这样你会更清楚些
class C: B
{
new public virtual void F() { Console.WriteLine("C.F"); }
}
意思是在类C中,覆盖其父类B的同名方法F(),也就是说,C中的F()与B中的F()没有关系了,已是新定义的方法了,只是名字相同而已。同时,C类中该方法被定义为virtual,以便在类D中可以重载。
-------
我还没听过有Virtual类的,是不是vs2005的功能?
Knight94(愚翁)说的是不是抽象类abstract关键字啊,呵呵