zoukankan      html  css  js  c++  java
  • .NET(C#):使用IResourceReader,IResourceWriter和ResourceSet获取资源文件

    注意:

    所有提及类均在: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类型 

  • 相关阅读:
    geodatabase在sql server和Oracle上的应用
    python:AttributeError: module 'xxxx' has no attribute 'xxxxx'
    sql server复制一张表到另一张表
    pyodbc:Python使用pyodbc访问数据库操作方法
    python如何生成token
    WebGIS应用案例
    SAP UI5 里如何让每次视图显示时都执行某方法
    使用开源微前端框架 Luigi 创建一个基于微前端架构的工程
    关于 SAP 产品 UI 的搜索引擎优化 SEO
    Debug a Server–Side Rendered SAP Spartacus Storefront Using Chrome Dev Tools
  • 原文地址:https://www.cnblogs.com/yuhanzhong/p/2975460.html
Copyright © 2011-2022 走看看