有哪些C#约定用于组合父方法和子方法输出



在JavaScript领域度过了许多月之后,我正在学习C#(仅供参考(。

我阅读了C#继承的介绍,以及何时何地不使用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的相同方法(例如(,那么在调用派生(leaf(类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;
}

注意:如果您给枚举名称和成员名称提供相同的名称(这是一种常见的做法(,您可能需要使用完全限定的名称来防止它们之间的混淆

最新更新