带有包/名称空间的继承[C#]
我想在子包中重新定义包的类,同时保持层次结构 我本想做这样的事情:带有包/名称空间的继承[C#],c#,inheritance,namespaces,package,C#,Inheritance,Namespaces,Package,我想在子包中重新定义包的类,同时保持层次结构 我本想做这样的事情: namespace RPG { public class Actor {} public class Character : Actor {} } public class Actor : RPG.Actor {} //kind of a diamond problem public class Character : Actor, RPG.Character {} 我知道这是不正确的;C#不支持多重继承,但我
namespace RPG {
public class Actor {}
public class Character : Actor {}
}
public class Actor : RPG.Actor {}
//kind of a diamond problem
public class Character : Actor, RPG.Character {}
我知道这是不正确的;C#不支持多重继承,但我不知道解决这种重新定义的最佳方法
接口不能解决我的问题。我可以用构图做类似的事情:
public class Character : Actor {
private RPG.Character basis;
// and do this for each attribute and method
public int atk { get { return basis.atk } set { basis.atk = value; } }
}
但是看起来不太好。此外,我还遇到了另一个问题
namespace RPG {
public class Actor {
public List<Stat> stats { get; set; }
}
public class Stat {}
}
public class Actor {
private RPG.Actor basis;
//I can't do that because Stat does not inherit from RPG.Stat
public override List<RPG.Stat> stats { get; set; }
}
public class Stat {
private RPG.Stat basis;
}
namespace-RPG{
公共级演员{
公共列表统计信息{get;set;}
}
公共类Stat{}
}
公共级演员{
私人角色扮演者基础;
//我不能这么做,因为Stat不是从RPG.Stat继承的
公共覆盖列表统计信息{get;set;}
}
公共类统计{
私人RPG.统计基础;
}
解决我的问题的最佳方法是什么?使用而不是继承
很难画一个直接的例子,因为你没有为你的RPG演员/角色提供任何动作,但概念是你将这些动作注入到你的类的构造函数中
在这种情况下,“移动”是指以下行为:
class Fighter
{
public int Health = 100;
public string Name;
private Move _move;
public string MoveName
{
get
{
return _move.Name;
}
}
public int MoveDamage
{
get
{
return _move.Damage;
}
}
public Fighter(string name, Move defaultMove)
{
Name = name;
_move = defaultMove;
}
public void Attack(Fighter defendant)
{
if (_move != null)
_move.Attack(defendant);
}
public void SetMove(Move move)
{
if (move != null)
_move = move;
}
}
abstract class Move
{
public int Damage { get; set; }
public string Name { get; set; }
protected Move(int damage,string name)
{
Damage = damage;
Name = name;
}
public void Attack(Fighter defendant)
{
defendant.Health -= Damage;
}
}
class PunchMove:Move
{
public PunchMove() : base(5, "Punch")
{
}
}
class KickMove:Move
{
public KickMove() : base(7, "Kick")
{
}
}
试试这个
namespace RPG {
public class Actor {
public void d(){
System.Console.Write("fhdf");
}
}
public class Character : Actor {}
}
////////////////
public class Character : RPG.Character {}
class Program
{
static void Main()
{
Character c = new Character();
c.d();
Console.WriteLine("Hello, World!");
}
}
这有什么用?这是如何回答这个问题的?这是继承层次结构。从子类继承可以访问树中其所有父类的所有公共成员。(例如,A是父类B是命名空间Z中的子类,D是另一命名空间中B的子类,则B可以访问A的公共成员。)。