ET(C#):使用ResourceManager类型
注意:
这是另一篇文章“.NET(C#):浅谈程序集清单资源和RESX资源”的一部分。
ResourceManager类型在System.Resources命名空间内,用来在运行时刻进行二进制程序集清单资源 (.resources文件)的读取,其也支持外部文件形式的读取。它和其他资源读取类:ResourceSet和IResourceReader的区别 是它的功能是最强大的(内部会使用一个ResourceSet),因为不因能够像ResourceSet一样快速读取资源数据,它可以对.NET中程序集 的附属程序集(satellite assembly)进行探索,因此支持资源数据的多文化读取。
下面是ResourceManager的常用成员:
//System.Resources命名空间内
//在运行时刻读取.resources二进制资源文件
//支持多语言探索
classResourceManager
//方法
构造函数(string baseName, Assembly ass);
//在程序集(ass参数)中查询baseName.resources文件
//有其他重载具有Type参数,来制定一个自定义的ResourceSet类型,默认使用ResourceSet类
构造函数(Type);
//BaseName = Type.Name, 内部程序集 = Type.Assembly
staticResourceManager CreateFileBasedResourceManager(string baseName, string folder, Type customResSet);
//(注意静态)从文件中创建一个ResourceManager类型
//从资源中读取数据
object GetObject(string, CultureInfo);
UnmanagedMemoryStream GetStream(string, CultureInfo);
string GetString(string, CultureInfo);
ResourceSet GetResourceSet(CultureInfo, bool, bool);
//获取ResourceSet对象,可以指定加载选项和文化不存在使用父文化
void ReleaseAllResources();
//关闭内部ResourceSet
//属性
BaseName: string;
//可以在构造函数中设置。
//如果资源文件名是aaa.en-us.resources,那BaseName是aaa
IgnoreCase: bool;
//数据查询中不区分大小写
下面代码使用IResourceWriter先写入一个二进制资源文件(a.resources),然后用ResourceManager读取文件 数据,注意从文件创建ResourceManager使用CreateFileBasedResourceManager,其中文件名称仍然按照 ResourceManager.BaseName属性,比如a.resources文件,名称就是a变可以了。
(关于IResourceReader或者IResourceWriter,可以参考这篇文章:.NET(C#):使用IResourceReader,IResourceWriter和ResourceSet):
//+ using System.Resources
classProgram
{
staticvoid Main()
{
//使用IResourceWriter
Write();
//使用ResourceManager读取
ReadUsingResourceManager();
}
//使用IResourceWriter
staticvoid Write()
{
using (IResourceWriter rw =newResourceWriter("a.resources"))
{
rw.AddResource("byte", (byte)0xff);
rw.AddResource("文本", "hellow");
rw.AddResource("guid", Guid.NewGuid());
}
}
//使用ResourceManager读取
staticvoid ReadUsingResourceManager()
{
var resMgr =ResourceManager.CreateFileBasedResourceManager("a", Directory.GetCurrentDirectory(), null);
Console.WriteLine((byte)resMgr.GetObject("byte"));
Console.WriteLine(resMgr.GetString("文本"));
Console.WriteLine((Guid)resMgr.GetObject("guid"));
}
}
输出:
255
hellow
cf042fc6-ae74-42c0-935c-ed962412bbb0