如果您选择跳过使用 ResourceManager,您可以让 Visual Studio 为您处理代码生成。最终生成的代码使用ResourceManager,但您不再手动编写该代码。此外,由于您引用的是生成的静态类,因此您会获得编译时检查。
如果您将资源文件添加到项目并从解决方案资源管理器中双击它,Visual Studio 会显示一个对话框,您可以在其中输入资源的名称及其值。该对话框为您提供了将资源添加为字符串、图像、音频等的选项(查看对话框顶部的下拉菜单)。接下来,要获取代码生成位,您需要将Access Modifier 设置为“公共”或“内部”。第三个选项是“不生成代码”。
例如,添加一个名为“MyResources”的资源文件,然后添加一个字符串资源,其名称为Greeting,值为Hello!,其中之一选择用于代码生成的前两个选项(从 public 开始测试它,根据需要限制访问),您现在应该能够通过 MyResources.Greeting 从代码中引用资源。如果您没有立即看到它,请确保您已保存文件并尝试编译。
string greeting = MyResources.Greeting; // "Hello!"
如果您添加其他资源类型(图像、音频等),那么返回类型当然会有所不同。
此时您可以检查生成的.cs 文件并查看生成的代码使用ResourceManager。资源文件的另一个用途是本地化。假设您想要一个西班牙语版本的MyResources。您将添加一个名为MyResources.es.resx 的新文件,其中es 对应于所需的语言代码(在本例中为西班牙语)。现在添加相同的资源名称Greeting,西班牙语值为Hola!。
如果您将线程文化更改为西班牙语,现在引用资源将返回西班牙语版本:
string defaultGreeting = MyResources.Greeting; // "Hello!"
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("es");
string spanishGreeting = MyResources.Greeting; // "Hola!"
请注意,您只需将访问修饰符设置为默认资源文件(即MyResources.resx)的代码生成选项之一,而不是您添加的所有其他本地化版本。这样做没有坏处,但在我看来,生成主文件而其他文件只具有所需的资源值而不生成代码会更干净。