gpt4 book ai didi

c# - 基于条件的继承构造函数选择

转载 作者:太空狗 更新时间:2023-10-30 00:48:03 26 4
gpt4 key购买 nike

我有一组继承类。根据初始化变量类型,我需要调用相应的构造函数。我想避免在这里使用 switch 分支,以防武器类型越来越多。也许有通用的方法或某种模式来实现这一目标?武器初始化:

switch (_weaponsData.WeaponType) 
{
case WeaponType.ProjectileWeapon:
weapon = new ProjectileWeapon(_weaponsData);
break;

case WeaponType.Laser:
weapon = new LaserWeapon(_weaponsData);
break;

case WeaponType.snowBall:
weapon = new SnowballWeapon(_weaponsData);
break;
}

自定义武器的构造函数:

public class ProjectileWeapon : BasicWeapon
{
public ProjectileWeapon(WeaponData weaponData) : base(weaponData) { }
}

public class LaserWeapon : BasicWeapon
{
public LaserWeapon(WeaponData weaponData) : base(weaponData) { }
}

public class SnowballWeapon : BasicWeapon
{
public SnowballWeapon(WeaponData weaponData) : base(weaponData) { }
}

最佳答案

这种事情是不可避免的,但如果你真的想避免 case switch结构你可以使用委托(delegate)字典,其中键是类型,值是 Func<BasicWeapon> .

var map = new Dictionary<WeaponType,Func<WeaponData,BasicWeapon>>
{
{ WeaponType.ProjectileWeapon, d => new ProjectileWeapon(d) },
{ WeaponType.LaserWeapon, d => new LaserWeapon(d) },
{ WeaponType.SnowballWeapon, d => new SnowballWeapon(d) },
};

然后创建一个新的武器对象,只需调用

weapon = map[_weaponsData.WeaponType](_weaponsData);

关于c# - 基于条件的继承构造函数选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50614549/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com