我对为什么我能够在抽象类中使用“this”感到有些困惑。
我正在制作一个非常简单的面向对象的角色扮演游戏。我有一个名为Items
. 然后我有两种类型的项目,可装备的和不可装备的。
interface IEquiptable
{
void equiptItem(Player p);
void unequiptItem(Player p);
}
有可装备物品的界面。
接下来,我有一个名为的抽象类Weapons
:
abstract class Weapons : Items, IEquiptable
{
public double powerOfWeapon { get; set; }
public double powerNeededToUse { get; set; }
public void equiptItem(Player p)
{
Console.WriteLine(this);
p.weapon = this;
}
public void unequiptItem(Player p)
{
//UNTESTED METHOD
p.weapon = new Swords("Fists", 1, 1);
}
}
这扩展了的基类Items
(这个类目前只包含项目的名称,所以不值得展示)并实现接口'IEquiptable'。
最后我有一堂课叫Swords
class Swords : Weapons
{
public Swords(string name, double powerOfS, double powerToU)
{
base.name = name;
powerOfWeapon = powerOfS;
powerNeededToUse = powerToU;
}
}
这扩展了 Weapons 并为剑提供了一个构造函数。
这是我的一些Player
课
class Player
{
public string Name { get; set; }
public double life { get; set; }
public double power { get; set; }
public Weapons weapon { get; set; } // Currently held weapon
private List<Items> items; //This is being used to represent a 'backpack' any item obtained will be added here.
为了装备武器,我使用这种方法:(在我的玩家类中)
public void equiptWeapon()
{
Weapons tempWep = items.OfType<Weapons>().FirstOrDefault();
if (tempWep != null)
{
tempWep.equiptItem(this);
}
}
我不明白为什么会这样。tempWep 被赋予列表中第一个 Weapon 的值。但是随后它调用了equiptItem()
由抽象类实现的方法,然后分配了“this”,我无法理解它是如何不因未初始化而引发错误的Weapons
希望你能明白我的意思。
谢谢。