假设我有一个名为Enemy的基类和一个名为Ogre的派生类。
这两种方式创建实例之间有什么区别:
Enemy newOgre = new Ogre();
Ogre newOgre = new Ogre();
最佳答案
实际上,创建实例的代码只是new Ogre()
。等号左侧的内容与创建实例无关。
第一条语句只是将创建的实例分配给Enemy
类型的变量。第二个是将其分配给Ogre
类型的变量。
因此,您有两个类型不同的变量,它们指向类型相同的对象,即Ogre
。
变量(等号左侧左侧上的内容)仅确定您可以从该对象访问的内容。例如,如果Ogre
类的方法不是从Enemy
继承的,则使用Enemy
变量将无法访问它。
请注意,该变量不会影响对象的行为。例如,如果Ogre
覆盖Enemy
中定义的方法,则该方法会执行不同的操作。使用Ogre
类型的变量在Enemy
实例上调用此方法将导致调用Ogre
中的覆盖方法,而不是Enemy
中的方法,
例如,考虑以下类:public class Enemy
{
public virtual void Test()
{
Console.WriteLine("enemy");
}
}
public class Ogre: Enemy
{
public override void Test()
{
Console.WriteLine("ogre");
}
}
现在,如果您这样做:Orge enemy = new Orge();
enemy.Test();
控制台将打印“食人魔”。
如果执行此操作:Enemy enemy = new Ogre();
enemy.Test();
控制台仍将显示“orge”。
关于c# - 基类=新派生类。这是如何运作的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33131610/