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()方法复制并粘贴到龙类上.但我确信有更好的方法可以做到这一点.
提前谢谢了.
只需使用访问修饰符装饰字段hp和name类.有了这个,他们也可以上课,你不必重新定义它们.您可以保持构造函数不变,因为它将在类中的构造函数之后运行,从而覆盖其字段的值.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()通常会覆盖该方法.
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |