來看這三個類的經常使用成員: spa
interface IResourceWriter: IDisposable orm
void AddResource(string name, object/string/byte[]); htm
//添加資源數據 對象
void Generate(); blog
//更新緩衝區(Flush) 繼承
void Close(); ci
//調用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的使用,能夠參考這篇文章:.NET(C#):使用ResourceManager類型.