这两者有什么区别
本文关键字:什么 区别 | 更新日期: 2023-09-27 18:06:53
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()
答案是一样的!
那么这两个初始化之间的确切区别是什么?
您正在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
的实现仍然存在。
您在此处使用的内容称为inheritance
。在您的情况下,您的 Program
类继承自 testclass1
.继承描述了一种是-一种关系:你是一个人,Program
是一个testclass1
。
正因为如此,你可以说testclass1 t = new Program()
.你创建一个 testclass1
类型的变量,并使用 Program
初始化它,这是一种特殊的testclass1
类型。
可以使用继承的一件事是扩展或替换行为。testclass1
类中的 virtual
关键字意味着从它派生的类可以替换该方法,就像您在Program
类中使用 override
关键字一样。
以下行将给出不同的结果:
Program p = new Program();
testclass1 t = new testclass1();
t.test();
p.test();
这将打印:
Child class
Parent class
但是,您可以将Program
类用作"testclass1",就像您可以像对待动物一样对待人或狗一样。