我正在制作一个基本游戏,并希望创建一个“角色”父类,该类将成为NPC和玩家角色的父类。我正在努力的是,当我调用继承的方法时,我希望能够使用在子代中分配的属性。为了将其置于上下文中,我想编写一个绘画函数,可以从传递要绘画的Graphics对象的主程序中调用它,这里有一个方法在我将其直接放入播放器角色中进行测试时起作用课:
public void Draw(Graphics g)
{
g.DrawImage(image, coords[0], coords[1]);
}
所以我在父类中有这个,但是图像和坐标都在子类中分配。我可以定义将在父级中的变量的类型,但是它仍然无法识别已定义的变量。
我将其称为player.Draw(g)
(其中玩家是子类的实例),但我是否会得到“ image null”或“ image is not defined”(取决于我是否放置了{{ 1}}在顶部还是不在顶部。该图像是在子类中定义的最终名称。
TLDR:从子类中调用方法时,如何使父类引用子类中定义的内容。
答案 0 :(得分:0)
父类不能从子类中调用方法。使用继承时,您需要定义所有在顶层(父级)通用的逻辑。
从父类继承的子类可以调用其父方法。它总是从上到下流动。每个子类在功能方面都变得更加具体。
我强烈建议您在继续研究某些基础知识之前,先对面向对象编程的继承进行一些研究。
这是一个不错的起点:https://docs.microsoft.com/en-us/dotnet/csharp/tutorials/inheritance
答案 1 :(得分:0)
这是很多信息的暗影,但是如果您可以使Character类抽象化,也许像这样的内容会有所帮助。
基本上,Draw的实现与Character基类(抽象)一起使用,而专业化或Image和Coordinates与NPC和Player类一起使用。猜测这就是您想要的。
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";
}