gpt4 book ai didi

c# - 基类 = 新派生类。这是如何运作的?

转载 作者:太空狗 更新时间:2023-10-29 23:55:31 25 4
gpt4 key购买 nike

假设我有一个名为 Enemy 的基类和一个名为 Ogre 的派生类。

这两种方式创建实例有什么区别:

Enemy newOgre = new Ogre();

Ogre newOgre = new Ogre();

最佳答案

实际上,创建实例的代码只是new Ogre()。等号左边的内容与创建实例无关。

第一个语句只是将创建的实例分配给类型为Enemy 的变量。第二个是将其分配给 Ogre 类型的变量。

所以你有两个不同类型的变量指向相同类型的对象,即Ogre

变量(等号左边的内容),只决定了你可以从对象访问什么。例如,如果 Ogre 类有一个方法不是从 Enemy 继承的,那么使用 Enemy 变量,你将无法访问它。

请注意变量不会影响对象的行为方式。例如,如果 Ogre 覆盖了 Enemy 中定义的方法,它做了一些不同的事情。使用 Enemy 类型的变量在 Ogre 的实例上调用此方法将导致调用 Ogre 中被覆盖的方法,而不是敌人,

例如,考虑这些类:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com