注意:

這是另一篇文章“.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