注意:
這是另一篇文章“.NET(C#):淺談資訊清單資源和RESX資源”的一部分。
ResourceManager類型在System.Resources命名空間內,用來在運行時刻進行二進位資訊清單資源(.resources檔案)的讀取,其也支援外部檔案形式的讀取。它和其他資源讀取類:ResourceSet和IResourceReader的區別是它的功能是最強大的(內部會使用一個ResourceSet),因為不因能夠像ResourceSet一樣快速讀取資源資料,它可以對.NET中程式集的附屬組件(satellite assembly)進行探索,因此支援資源資料的多文化讀取。
下面是ResourceManager的常用成員:
//System.Resources命名空間內
//在運行時刻讀取.resources二進位資源檔
//支援多語言探索
class ResourceManager
//方法
建構函式(string baseName, Assembly ass);
//在程式集(ass參數)中查詢baseName.resources檔案
//有其他重載具有Type參數,來制定一個自訂的ResourceSet類型,預設使用ResourceSet類
建構函式(Type);
//BaseName = Type.Name, 內部程式集 = Type.Assembly
static ResourceManager 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
class Program
{
static void Main()
{
//使用IResourceWriter
Write();
//使用ResourceManager讀取
ReadUsingResourceManager();
}
//使用IResourceWriter
static void Write()
{
using (IResourceWriter rw = new ResourceWriter("a.resources"))
{
rw.AddResource("byte", (byte)0xff);
rw.AddResource("文本", "hellow");
rw.AddResource("guid", Guid.NewGuid());
}
}
//使用ResourceManager讀取
static void 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