如何在继承方法中使用 child 属性

How to use child attributes in a inherited method

我正在制作一款基本游戏,我想创建一个 "Character" parent class,它对 NPC 和玩家角色都是 parent。我遇到的问题是,当我调用继承方法时,我希望能够使用在 child 中分配的属性。为了将其置于上下文中,我想编写一个绘图函数,我可以从传递要绘制的图形 object 的主程序中调用该函数,我在这里有一个方法可以在我测试它时通过直接放置它来工作进入玩家角色class:

public void Draw(Graphics g)
        {
            g.DrawImage(image, coords[0], coords[1]);
        }

所以我在 parent class 中有这个,但是图像和坐标都在 child class 中分配。我可以定义将在 parent 中的变量类型,但它仍然无法识别已定义的变量类型。

我称它为 player.Draw(g)(其中播放器是 child class 的一个实例)但我得到 "image is null" 或 "image is not defined" 取决于关于我是否将 Bitmap image; 放在顶部。该图像是在 child class.

中定义的。

TLDR:如何让 parent class 在从 child child class 调用方法时引用 child class 中定义的内容=31=].

Parent classes 不能从 child classes 调用方法。使用继承时,您希望定义顶层通用的所有逻辑 (parent)。

从 parent class 继承的

Child class 可以调用其 parent 的方法。它总是从上到下流动。随着每个 child class 在功能方面变得更加具体。

我强烈建议您在继续研究面向 object 的编程之前对继承做一些研究,因为您正在努力学习一些基础知识。

这将是一个很好的起点:https://docs.microsoft.com/en-us/dotnet/csharp/tutorials/inheritance

这些信息是在黑暗中进行的大量尝试,但是如果您可以使您的角色 class 抽象,也许这样的东西会对您有所帮助。

基本上,Draw 的实现与角色基础 class(抽象)相关,而专业化或图像和坐标与 NPC 和玩家 classes 相关。猜猜这就是您要找的东西。

void Main()
{
    var player = new Player();
    var npc = new NPC();

    var characters = new List<Character>(new Character[] { player, npc});

    foreach (var character in characters)
    {
        character.Draw();
    }
}

abstract class Character
{
    public abstract string Image { get; }

    public abstract string Coordinate { get; }

    public void Draw()
    {
        Console.WriteLine($"Drawing Image {Image} at Coordinate {Coordinate}");
    }
}

class NPC : Character
{
    public override string Image => "NPC IMAGE";

    public override string Coordinate => "NPC Coordinate";
}

class Player : Character
{
    public override string Image => "PLAYER IMAGE";

    public override string Coordinate => "PLAYER Coordinate";
}