gpt4 book ai didi

c# - 重新利用 .net 类型系统——坏主意?

转载 作者:行者123 更新时间:2023-11-30 12:09:38 26 4
gpt4 key购买 nike

我正在尝试编写一个元素制作系统,我可能希望有一天将其放入游戏中。有 Recipe 指定他们需要的成分和他们生产的东西。

我希望食谱具有灵 active ,这样它们只需要种类繁多的配料,而不是一种确切的配料。例如,武器 Blade 的配方可能只是说它需要金属,而不是具体的钢。食谱必须验证所提供的成分是否在可接受的范围内。一些 Material 可能属于多个类别。

然后我有了一个可能绝妙但可能疯狂的想法。 .net 类型系统已经实现了!因此,对于每种 Material ,我都添加了 Type 类型的属性,并使用 IsAssignableFrom 来验证成分的兼容性。

我有一个看起来像这样的文件:

public interface ItemType { }

public interface Material : ItemType { }

public interface Metal : Material { }

public interface Gold : Metal { }
public interface Silver : Metal { }
public interface Iron : Metal { }
public interface Steel : Metal { }

public interface Wood : Material { }
public interface Coal : Material { }

等等。这些都没有实现过。我只是出于自己的目的借用内置类型检查。

这有什么必然的错误吗?

编辑:实际问题

如果我已经足够清楚地解释了我试图在这里完成的事情,那么您会建议什么是解决这个问题的好方法,而忽略整个类型系统滥用问题?您是否也会使用此解决方案或其他解决方案?

第二个问题,我在这里做的事情有什么需要注意的陷阱吗?

最佳答案

Is there anything necessarily wrong with this?

是的,一切。

  1. 类和接口(interface)旨在表达行为。您的代码中没有任何行为。您的代码没有误解意图。通常,当您看到接口(interface)时,您希望它有一些方法并且该方法被调用。这里不是这种情况。
  2. 将无法像大多数普通游戏那样在某种配置/资源文件中定义 Material 和配方。所以每次你想稍微改变 Material 或配方时,你都必须重新编译。
  3. 创建以某种方式相关的项目/ Material 会变得有问题。例如,假设有多个工具,每个工具可以来自不同的 Material 。在您的情况下,您必须写下每个组合。在理想情况下,您可以只运行几个嵌套的 for 循环来创建每个组合。
  4. 如果不创建 Material 类,您就无法以任何方式对其进行参数化。例如,您可能想要不同颜色的羊毛。你会怎么做?为每种颜色创建界面?或者使用某种枚举作为参数。但是你必须为此创建类。

更好的方法是使用具有标签集合的简单 Item 类。即使是简单的字符串也应该足够了。

关于c# - 重新利用 .net 类型系统——坏主意?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20937346/

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