我们有一个管理通用物理资源的系统。有超过500个人资源。该系统用于许多不同的事情,并使软件更容易编写我们使用别名。
例如,物理资源TG67I9的别名是" RightDoor"。编写代码时,使用RightDoor代替TG67I9,使代码更具可读性。此别名列表作为文本文件加载,并引用资源及其别名。该系统使用数百个不同的别名列表来引用相同的物理资源。
这种类型的设置有两个主要缺点。首先,当使用别名调用资源时,它们将作为字符串传递。 Door.Open(" RightDoor")例如。这并没有提供任何工具提示或智能,使代码更难编写。它基本上需要不断引用别名列表。是RightDoor还是Right_Door还是右门还是......你明白了。第二个是在执行之前没有参数验证。所有编译器都知道传入一个字符串然后它很高兴。只有在代码运行时,该函数才会尝试通过别名访问资源并失败,因为它无法找到右门,因为它应该是RightDoor。显示错误。这需要繁琐的调试并反复运行代码以清除任何坏的别名。
有更好的方法吗?这样,别名列表可以通过物理资源与其别名的交叉引用来制作,并且在列表之后可以显示工具提示可以显示资源。 (假设可以从头开始编写新系统)
我使用最新的.NET与VisualStudio 2017和C#编写代码。
答案 0 :(得分:1)
最简单的方法很可能是“string enum”:
public class Resources {
public const string
LeftDoor = "TG67I8",
RightDoor = "TG67I9";
}
样品使用:
Door.Open(Resources.RightDoor);
将鼠标悬停在VS中的.RightDoor上会显示工具提示(constant) string Resources.RightDoor = "TG67I9"
右键单击.RightDoor并选择查找所有引用将显示变量的使用位置。
另一个选项可以是在Project Properties的Resources部分添加字符串,然后:
using YourProjectNameSpace.Properties;
...
Door.Open(Resources.RightDoor);
这有点慢,因为资源是在运行时检索的,但允许从与可执行文件分开的自定义外部文件加载资源。
答案 1 :(得分:1)
使用带常量的静态类。我已经做过很多次了同样的事情。加.NET does this as well。
public static class PhysicalResources
{
public const string One = "Uno";
public const string Two = "Deux";
// ...
}