注意:
所有提及类均在:System.Resources命名空间内。
来看这三个类的常用成员:
interface IResourceWriter: IDisposable
void AddResource(string name, object/string/byte[]);
//添加资源数据
void Generate();
//更新缓冲区(Flush)
void Close();
//调用Dispose
interface IResourceReader: IDisposable, IEnumerable
IDictionaryEnumerator GetEnumerator();
//获取字典迭代器(用来枚举资源)
void Close();
//调用Dispose
class ResourceSet: IDisposable, IEnumerable
//没有CultureInfo支持,封装一个IResourceReader
构造函数(Stream/IResourceReader/string);
Type GetDefaultReader/Writer();
//返回默认IResourceReader/Writer类型
IDictionaryEnumerator GetEnumerator();
//等效于IResourceReader.GetEnumerator
object GetObject(string);
string GetString(string);
//有bool参数:指定否是不区分大小写
//返回资源中指定名称的数据
有两个类继承IResourceReader,分别是ResourceReader和ResxResourceReader。
IResourceWriter则为ResourceWriter和ResxResourceWriter。
ResourceReader和ResourceWriter操作的是二进制的资源文件,以.resources为扩展名。
ResxResourceReader和ResxResourceWriter操作的是XML格式的RESX文件(注意RESX在编译后也用到.resources文件)
这些类的构造函数可以指定字符串表示文件路径或者Stream对象。
最后ResxResourceReader/Writer类型在System.Windows.Forms.dll类库中。而ResourceReader/Writer在mscorlib.dll类库中。
下面代码,使用IResourceWriter来写一个资源文件(用ResourceWriter类型,所以是.resources文件),然后用IResourceReader和ResourceSet来读取资源文件:
//+ using System.Resources
class Program
{
static void Main()
{
//使用IResourceWriter
Write();
//使用IResourceReader
ReadUsingResourceReader();
//使用ResourceSet
ReadUsingResourceSet();
}
//使用IResourceWriter
static void Write()
{
using (IResourceWriter rw = new ResourceWriter("a.resources"))
{
rw.AddResource("byte", 0xff);
rw.AddResource("文本", "hellow");
rw.AddResource("guid", Guid.NewGuid());
}
}
//使用IResourceReader
static void ReadUsingResourceReader()
{
Console.WriteLine("== 使用IResourceReader");
using (IResourceReader rr = new ResourceReader("a.resources"))
{
var iter = rr.GetEnumerator();
while (iter.MoveNext())
Console.WriteLine("键: {0} 值: {1}", iter.Key, iter.Value);
}
}
//使用ResourceSet
static void ReadUsingResourceSet()
{
Console.WriteLine("== 使用ResourceSet");
using (ResourceSet rs = new ResourceSet("a.resources"))
{
Console.WriteLine(rs.GetObject("byte"));
Console.WriteLine(rs.GetString("文本"));
Console.WriteLine(rs.GetObject("guid"));
}
}
}
输出:
== 使用IResourceReader
键: 文本 值: hellow
键: guid 值: 7f958dc9-eae2-43f5-a150-88fd8a07374e
键: byte 值: 255
== 使用ResourceSet
255
hellow
7f958dc9-eae2-43f5-a150-88fd8a07374e
.NET还提供一个ResourceManager类型来提供支持多语言的资源提取,原理是通过探索.NET中的附属程序集(satellite assembly),关于ResourceManager的使用,
http://www.cnblogs.com/mgen/archive/2011/12/11/2283885.html.NET(C#):使用ResourceManager类型