Fra*_*nby 3 c# types enumeration
我有一个如下所示的枚举:
public enum EnumWeapons
{
Fists = new WeaponFists(),
Sword = new WeaponSword(),
Bow = new WeaponBow(),
Staff = new WeaponStaff()
}
Run Code Online (Sandbox Code Playgroud)
哪些派生自基类武器.
是否有可能以这种方式使用枚举?
如果是这样,我能做以下事情吗?:
public Weapon weapon = (Weapon)EnumWeapons.Fists;
Run Code Online (Sandbox Code Playgroud)
我的尝试没有按预期工作,任何帮助或指导都赞赏:).谢谢!
jas*_*son 10
这是不可能的,a的基础类型enum
是各种整数类型.从文档:
经批准的类型枚举是
byte
,sbyte
,short
,ushort
,int
,uint
,long
,或ulong
.
此外,我甚至不认为你想要做的事情是有道理的.当你需要武器时,你真的每次都想要相同的实例吗?我对此表示怀疑.
我认为你真正想要的是一家工厂.在它最天真的形式,你可以说:
public enum WeaponType {
Fists,
Sword,
Bow,
Staff
}
public class WeaponFactory {
public Weapon Create(WeaponType weaponType) {
switch(weaponType) {
case WeaponType.Fists:
return new WeaponFists();
case WeaponType.Sword:
return new WeaponSword();
case WeaponType.Bow:
return new WeaponBow();
case WeaponType.Staff:
return new WeaponStaff();
default:
throw new ArgumentOutOfRangeException("weaponType");
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在你可以说:
var weapon = weaponFactory.Create(WeaponType.Fists);
Run Code Online (Sandbox Code Playgroud)
不,枚举必须是整数类型(byte,short,int,long).
您要做的事情可能是这样实现的:
public static class EnumWeapons
{
public static readonly Weapon Fists = new WeaponFists();
public static readonly Weapon Sword = new WeaponSword();
public static readonly Weapon Bow = new WeaponBow();
public static readonly Weapon Staff = new WeaponStaff();
}
Run Code Online (Sandbox Code Playgroud)