Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.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
有点脑筋急转弯:带有C#类的自定义逻辑字符串_C#_Inheritance_Logic - Fatal编程技术网

有点脑筋急转弯:带有C#类的自定义逻辑字符串

有点脑筋急转弯:带有C#类的自定义逻辑字符串,c#,inheritance,logic,C#,Inheritance,Logic,所以,我的基本设置是这样的:我有一些项目,它们被限制在不同的类中。这些项目具有效果,也仅限于不同的类别。例如,我可能有一件物品只能由精灵使用,而另一件物品可以由所有人使用,但会给精灵特定的奖励/效果 下面是一个限制类: public class Restriction { private int _base_id = 0; private bool _qualify = true; public Restriction() { } // ... Base_ID a

所以,我的基本设置是这样的:我有一些项目,它们被限制在不同的类中。这些项目具有效果,也仅限于不同的类别。例如,我可能有一件物品只能由精灵使用,而另一件物品可以由所有人使用,但会给精灵特定的奖励/效果

下面是一个限制类:

public class Restriction {
    private int _base_id = 0;
    private bool _qualify = true;
    public Restriction() { }
    // ... Base_ID and Qualify getters and setters here
    public virtual bool Check(int c) {
        if(_qualify) { return c == _base_id; }
        else { return c != _base_id; }
}
Restriction类的子级可能是RaceRestriction,它仅重写构造函数:

public RaceRestriction(reference.races r, bool qual) {
    Base_ID = (int)r; Qualify = qual;
}
reference.r是引用文件中的枚举。这里的想法是,我可以将这个“限制”语法扩展到我在引用文件中定义的任何类——这样我就可以对种族、类、统计数据进行限制,无论我需要什么

所以,当我定义(例如)一个物品时,这一切都达到了顶点,这个物品对谁可以装备它有限制

下面是Equipment类的一个片段,我在其中定义了一个设备供以后使用(希望它可以原样阅读):

公共设备(){
...
_主设备清单[1]=新设备{
Name=“剑”,
Description=“只是一把展示用的剑”,
统计数据={
新属性{
Stat_修饰符=新的KeyValuePair(reference.stats.ATTACK,5),
限制={
新的种族限制(reference.races.TROLL,false)
}
}
},
限制={
新类限制(reference.class.WARRIOR,true)
}
}
因此,这背后的想法是,使用这个系统,我定义了一把剑,只能由战士使用(基本战士对该物品的真实限制),它可以对任何使用它的巨魔进行5次攻击

我陷入困境的是,这只适用于逻辑AND或逻辑AND或逻辑字符串。假设我的物品上写着“战士可以使用这个”,上面写着“精灵可以使用这个”。我真的是指“战士或精灵”还是“战士精灵”

我认为,这种区别是必要的,所以我需要对每个限制附加一些逻辑,基本上,我认为,这些限制是相互关联的,这些限制与其他限制的组合,等等,但我觉得这很快就会失控


有更好的方法吗?

与其定义特定的限制类,不如通过定义一个名为
IRestrictable
的接口来设计,该接口将由
设备
类实现。该接口将至少包含一个名为
检查合格性
的方法(或类似方法)这将返回一个bool。然后,您的设备类可以根据您需要的任何输入和类当时可用的任何信息,自由使用它想要得到答案的任何逻辑表达式。如果需要检查不同情况下的限制,您可以在接口上有多个方法。对于具有复杂规则的特定类型的设备,您可以自由实现从
设备
派生的特定类。

很高兴看到一个非常不同类型的问题。
public Equipment() { 
    ...
    _master_equipment_list[1] = new Equipment {
        Name = "Sword",
        Description = "It's just a sword for demonstration",
        Stats = {
            new Attribute {
                Stat_Modifier = new KeyValuePair<reference.stats, int>(reference.stats.ATTACK, 5),
                Restrictions = {
                    new RaceRestriction(reference.races.TROLL, false)
                }
            }
        },
        Restrictions = {
            new ClassRestriction(reference.class.WARRIOR, true)
        }
    }