我和一个小组正在 C# 中在我们教授的帮助下开发一个小游戏,但是在尝试创建一个构造层次结构时,我们遇到了一个奇怪的错误,但我们似乎找不到原因。 Player 类的相关部分(错误所在)和 Player 继承的 Character 类都如下。
玩家等级:
public class Player : Character
{
public int LVL {get; private set;} // Player level
public int XP {get; private set;} // Experience points
public int MXP {get; private set;} // Max Exp
public int COIN {get; private set;} // Player Coins
private Room _currentRoom = null;
public Room CurrentRoom { get { return _currentRoom; } set { _currentRoom = value; } }
public Player() : this(null) { }
public Player(Room room) : this(room, null) { }
public Player(Room room, string? name) : this(room, name, 0) { }
public Player(Room room, string? name, int hp) : this(room, name, hp, 0) { }
public Player(Room room, string? name, int hp, int atk) : this(room, name, hp, atk, 0){}
public Player(Room room, string name, int hp, int atk, int def)
^(C7036 is thrown here. There is no argument given that corresponds to the required parameter 'name' of 'Character.Character(string, int, int, int)'CS7036)
{
_currentRoom = room;
Name = name;
HP = hp;
ATK = atk;
DEF = def;
LVL = 1; // to start
XP = 0;
MXP = 13;
COIN = 13;
}
角色类别:
public class Character : ICharacter{
private string? _name;
public string? Name{
get {
return _name;
}
set{
_name = value;
}
}
private int _hp;
public int HP{
get{
return _hp;
}
set{
_hp = value;
}
}
private int _atk;
public int ATK{
get{
return _atk;
}
set{
_atk = value;
}
}
private int _def;
public int DEF{
get{
return _def;
}
set{
_def = value;
}
}
public Character(string name, int hp, int atk, int def){
Name = name;
HP = hp;
ATK = atk;
DEF = def;
}
我们尝试调整层次结构,使名称可为空,并尝试使用 Player 和 Character 构造函数来查看它是否能够识别“名称”。到目前为止,还没有什么能够消除这个错误。
Player
中的构造函数相互级联,但不级联到其基类。由于 Character
没有无参数构造函数,因此创建它的实例需要提供它期望的参数。
类似于
Player
构造函数如何通过调用 this()
进行封装,最终任何构造也必须使用正确的参数调用 base()
。例如:
public Player(Room room, string name, int hp, int atk, int def)
: base(name, hp, atk, def)
{
_currentRoom = room;
LVL = 1; // to start
XP = 0;
MXP = 13;
COIN = 13;
}