Wil*_*iam 7 c# abstract-class this
我有点困惑为什么我能够在抽象类中使用'this'.
我正在制作一个非常简单的面向对象的角色扮演游戏.我有一个基础/超级类叫Items.然后,我有两种类型的物品,可装备和非装备.
interface IEquiptable
{
void equiptItem(Player p);
void unequiptItem(Player p);
}
Run Code Online (Sandbox Code Playgroud)
Theres可装备物品的界面.
接下来,我有一个名为的抽象类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);
}
}
Run Code Online (Sandbox Code Playgroud)
这扩展了基类Items(此类目前只包含项目的名称,因此不值得显示)并实现接口'IEquiptable'.
最后我有一个叫做的课 Swords
class Swords : Weapons
{
public Swords(string name, double powerOfS, double powerToU)
{
base.name = name;
powerOfWeapon = powerOfS;
powerNeededToUse = powerToU;
}
}
Run Code Online (Sandbox Code Playgroud)
这扩展了武器并为剑提供了构造.
这是我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.
Run Code Online (Sandbox Code Playgroud)
要使用这种方法来获取武器:(在我的播放器类中)
public void equiptWeapon()
{
Weapons tempWep = items.OfType<Weapons>().FirstOrDefault();
if (tempWep != null)
{
tempWep.equiptItem(this);
}
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么会这样.tempWep被赋予列表中第一个武器的值.但是它调用了equiptItem()抽象类实现的方法,然后分配'this',我无法理解它不会因为没有初始化而抛出错误Weapons
希望你能明白我的意思.
谢谢.
语言约束意味着您不能直接创建抽象类,但是完全可以拥有它的实例 - 您只需创建派生类的实例,然后将其转换为抽象类.抽象类也可以在其中实现,因此关键字的使用this是完全正常且可接受的.