Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d 如何避免两个具有相同属性的类_Unity3d_Arguments_Subclass_Bit Shift - Fatal编程技术网

Unity3d 如何避免两个具有相同属性的类

Unity3d 如何避免两个具有相同属性的类,unity3d,arguments,subclass,bit-shift,Unity3d,Arguments,Subclass,Bit Shift,我正在Unity3D中用C#编写代码。这是我关于堆栈溢出的第一个问题。我希望一切正常 在我的游戏中,我有两个空的子类,它们作为枚举扩展工作,并且完全相同: public class Condition { public int ID { get; set; } public int IDAsBitMask { get { return 1 << ID; } } public string Name { get; set; } public Sprite

我正在Unity3D中用C#编写代码。这是我关于堆栈溢出的第一个问题。我希望一切正常

在我的游戏中,我有两个空的子类,它们作为枚举扩展工作,并且完全相同:

public class Condition {
    public int ID { get; set; }
    public int IDAsBitMask { get { return 1 << ID; } }
    public string Name { get; set; }
    public Sprite Picture { get; set; }
}

public class PositiveCondition : Condition { }
public class NegativeCondition : Condition { }
但是,创建两个不声明任何内容的子类似乎是多余的。 我有没有办法避免这种代码架构?仍然只能将否定条件作为参数传递给我的HarmfulTrap方法?我正在寻找一种在编译时有效的方法。运行时,HasCondition方法中没有验证检查


谢谢。

您可以在Condition类中添加一个公共bool,如“isNegative”,然后从对象中访问该变量以检查它是正的还是负的

public class Condition {
    ...
    public bool isNegative { get; set; }
}
在你的职能中:

public class HarmfulTrap {

   int myByteMask;

   public bool HasCondition(Condition condition) {
      if(condition.isNegative)
      {
        return (myByteMask & condition.IDAsBitMask) == condition.IDAsBitMask;
      } 
      //add else here with the default value you want to return          
   }
}

谢谢你的主意。我更希望方法“HasCondition”从一开始就只允许正确的参数。如果我真的使用了你的想法,我需要一种在编译时而不是在程序运行时检查“条件”的方法。了解Unity,你在这里提出的建议听起来像是对一个不存在的问题的过度设计的解决方案。我个人会回到画板上。如果您只想接受特定类型的项,我个人会考虑向您的MonoBehavior添加接口,然后类似于
public void HasCondition(INegativeCondition)
对于一个实际上不存在的问题,您的意思是什么?如果我使用接口,我仍然必须声明两个类,每个类实现一个不同的接口,但没有其他的,不是吗?这不是多余的。这个解决方案非常简单,它可以保护你不被以后的情况所混淆,所以我的想法是:你可以继续使用它。这就是我所希望的。我只是想确保我没有遗漏一些明显的东西。非常感谢奥比万。这是完全可以接受的。我要添加的唯一内容是将基本
条件
声明为抽象。
public class HarmfulTrap {

   int myByteMask;

   public bool HasCondition(Condition condition) {
      if(condition.isNegative)
      {
        return (myByteMask & condition.IDAsBitMask) == condition.IDAsBitMask;
      } 
      //add else here with the default value you want to return          
   }
}