有哪些 C# 约定用于组合父方法和子方法输出?
What C# conventions are there for combining parent and child method outputs?
我在 JavaScript 陆地上花了很多时间学习 C#(仅供参考)。
我读了 C# inheritance introduction as well as when and when not to use new/override 并且(原谅我的无知)想知道是否有最佳实践或约定来组合具有相同签名的父方法和派生 class 方法的输出。
我正在构建的游戏中的示例(不是整个文件,只是示例):
// 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 的幂,以便可以使用按位或运算符组合值。
我假设(根据我目前的理解)如果我要从 EnemyController 派生一个 class 并定义一个返回 base.Target() | TargetTypes.Small
的相同方法(例如)我会调用derived(leaf)时获取这三种类型class 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。)
我在 JavaScript 陆地上花了很多时间学习 C#(仅供参考)。
我读了 C# inheritance introduction as well as when and when not to use new/override 并且(原谅我的无知)想知道是否有最佳实践或约定来组合具有相同签名的父方法和派生 class 方法的输出。
我正在构建的游戏中的示例(不是整个文件,只是示例):
// 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 的幂,以便可以使用按位或运算符组合值。
我假设(根据我目前的理解)如果我要从 EnemyController 派生一个 class 并定义一个返回 base.Target() | TargetTypes.Small
的相同方法(例如)我会调用derived(leaf)时获取这三种类型class 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。)