namespace test
{
class testclass1
{
public virtual void test()
{
Console.WriteLine("Parent class");
}
}
}
namespace test
{
class Program : testclass1
{
public override void test()
{
Console.WriteLine("Child class");
}
static void Main(string[] args)
{
Program t = new Program();
t.test();
Console.ReadLine();
}
}
}
使用Program t = new Program()
答案是“儿童类”,也是在使用时
testclass1 t = new Program()
答案是一样的!
那么这两个初始化之间的确切区别是什么?
答案 0 :(得分:2)
您正在为t
Program
的实例分配TestClass
,因此它总是会调用Program
的方法实现,因为它是派生类并且是重写的基本方法。
public class Base
{
//I am virtual, this means that I can be overriden
public virtual void MethodA()
{
Console.WriteLine("Hello, From Base");
}
}
public class Derived : Base
{
//I am Base, but with other stuff.
//I am going to do something else with MethodA
public override void MethodA()
{
Console.WriteLine("Hello, From Derived");
}
}
你本来就是在做。
Base o = new Dervied();
Derived
是一个基础,但它不能从Derived
更改为Base
,因此Derived
的实现仍然有效。
答案 1 :(得分:0)
您在此处使用的内容称为inheritance
。在您的情况下,您的Program
类继承自testclass1
。继承描述了一种is-a关系:您是一个人,Program
是一个testclass1
。
因此,您可以说testclass1 t = new Program()
。您创建了testclass1
类型的变量,并使用Program
对其进行初始化,testclass1
是一种特殊类型的virtual
。
您可以使用继承的一个方面是扩展或替换行为。 testclass1
类中的override
关键字意味着从中派生的类可以替换您使用Program
类中Program p = new Program();
testclass1 t = new testclass1();
t.test();
p.test();
关键字的方法。
以下几行会产生不同的结果:
Child class
Parent class
这将打印:
Program
然而,你可以使用你的{{1}}类,就好像它是一个`testclass1一样,就像你可以被视为一个人或狗一样,就像它是动物一样。