问题描述
我在JavaScript领域经历了很多月之后才开始学习C#(仅供参考)。
我阅读了C#inheritance简介以及何时和何时不使用new/override,并且(请问无知)想知道是否存在将父级和派生的输出相结合的最佳实践或约定具有相同签名的类方法。
// CharController
using static TargetController;
public abstract class CharacterController : MonoBehavIoUr,ICharacter
{
public virtual targettypes Target() {
return targettypes.Character;
}
}
// PlayerController
using static TargetController;
public class PlayerController : CharacterController,IPlayer
{
public override targettypes Target()
{
return base.Target() | targettypes.Player;
}
}
// EnemyController
using static TargetController;
public class EnemyController : CharacterController,IEnemy
{
public override targettypes Target()
{
return base.Target() | targettypes.Enemy;
}
}
targettype
枚举启用了标志,并且将类型设置为2的幂,以便可以使用按位OR运算符组合值。
我假设(根据我目前的理解)假设,如果我想从EnemyController派生一个类,并定义一个返回base.Target() | targettypes.Small
的相同方法,例如,我将在调用时得到这三种类型派生(叶)类Target方法:Character,Enemy,Small
。
如果这种方法是完全错误的,或者存在一些将具有相同签名的方法的输出组合在一起的约定,请随时给我一个新的方法(请以智慧和良好的权威!)。是否以某种方式链接方法?)。
感谢您的时间!
解决方法
对我很好。尽管您可能应该将其重命名为GetTargetTypes()
或将其设为属性:
public abstract class CharacterController : MonoBehaviour,ICharacter
{
public virtual TargetTypes TargetTypes => TargetTypes.Character;
}
public class PlayerController : CharacterController,IPlayer
{
public override TargetTypes TargetTypes => base.TargetTypes | TargetTypes.Player;
}
注意:如果您给枚举名称和成员名称相同的名称(common practice),则可能需要使用全限定名称来防止混淆。