抽象类中的'this'关键字

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

希望你能明白我的意思.

谢谢.

slu*_*ter 5

语言约束意味着您不能直接创建抽象类,但是完全可以拥有它的实例 - 您只需创建派生类的实例,然后将其转换为抽象类.抽象类也可以在其中实现,因此关键字的使用this是完全正常且可接受的.