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
