C#可以继承方法或属性使用派生类成员而无需创建新方法吗?

1 c#

我正在使用C#编写一个简单的游戏,以帮助我学习基本的面向对象概念.

在下面的代码中:

class entity
    {
    int hp;
    string name;

    public entity()
    {
        hp = 1;
        name = "entity";
    }

    public string status()
    {
        string result;
        result=name + "#" + " HP:" + hp;
        return result;
    }






    class dragon : entity
    {

    new public string name;
    new int hp;


    public dragon()
    {
        hp = 100;
        name = "Dragon";

    }
}
Run Code Online (Sandbox Code Playgroud)

我为"龙"做了一个对象

dragon mydragon = new dragon();
Run Code Online (Sandbox Code Playgroud)

问题出在以下代码中:

mydragon.status();
Run Code Online (Sandbox Code Playgroud)

这返回一个字符串,但是带有实体类对象的"name"和"hp" (即hp = 1,name = entity).

我想让它返回龙对象的值(hp = 100,name = dragon).我不确定我做错了什么,但似乎很简单.

经过几个小时的挣扎和挣扎之后,我唯一能解决的问题就是将status()方法复制并粘贴到龙类上.但我确信有更好的方法可以做到这一点.

提前谢谢了.

Nik*_*sev 6

只需使用访问修饰符装饰字段hpname类.有了这个,他们也可以上课,你不必重新定义它们.您可以保持构造函数不变,因为它将在类中的构造函数之后运行,从而覆盖其字段的值.entityprotecteddragondragonentity

它可能如下所示:

public class Entity
{
    protected int hp;
    protected string name;

    public Entity()
    {
        hp = 1;
        name = "entity";
    }

    public override string ToString()
    {
        string result = name + "#" + " HP:" + hp;
        return result;
    }
}

public class Dragon : Entity
{
    public Dragon()
    {
        hp = 100;
        name = "Dragon";
    }
}
Run Code Online (Sandbox Code Playgroud)

习惯上,C#中的类名称以大写字母开头.此外,对于返回类的返回字符串表示形式的东西,ToString()通常会覆盖该方法.