• ICE框架之Slice2CSharp映射---字典的映射


     在slice中我们有如下定义:

    Dictionary<long, Employee> EmployeeMap;

    Slice2CS编译器会将上面的字典生成同名的C#类:

           public class EmployeeMap : System.Collections.DictionaryBase,

                                                  System.ICloneable

        {

          public Employee this[long key] { get; set; }

          public System.Collections.ICollection Keys { get; }

          public System.Collections.ICollection Values { get; }

          public void AddRange(EmployeeMap d);

    public void Add(long key, Employee value);

          public void Remove(long key);

          public bool Contains(long key);

          public object Clone();

          public override int GetHashCode();

          public override bool Equals(object other);

          public static bool Equals(EmployeeMap lhs,

                                          EmployeeMap rhs);

          public static bool operator==(EmployeeMap lhs,

                                               EmployeeMap rhs);

          public static bool operator!=(EmployeeMap lhs,

                                               EmployeeMap rhs);

         }

           注意生成的类继承自DictionaryBase基类,所以也就拥有基类的方法。利用继承自基类的AddRange方法我们可以将一个字典的内容附加到另一个字典。如果目标字典和源字典的键有冲突的话,目标字典的键不会被覆盖。例如:

    Employee e1 = new Employee();

    e1.number = 42;

    e1.firstName = "Herb";

    e1.lastName = "Sutter";

    EmployeeMap em1 = new EmployeeMap();

    em[42] = e1;

    Employee e2 = new Employee();

    e2.number = 42;

    e2.firstName = "Stan";

    e2.lastName = "Lipmann";

    EmployeeMap em2 = new EmployeeMap();

    em[42] = e2;

    // Add contents of em2 to em1

      em1.AddRange(em2);

    // Equal keys preserve the original value

    Debug.Assert(em1[42].firstName.Equals("Herb"));

    生成的代码也提供了GetHashCodeEquals== !=方法(两个字典只有在它们包含的条目一样多,并且每个条目的键和值都相同时,才被认为是相等的)。

           生成的Clone方法依然是浅copy

  • 相关阅读:
    JavaBean 之Hello World(入门实例)
    Velocity之Hello World(入门实例)
    URL, URI 和 URN 之间的区别
    Windows平台的Windbg/x64dbg/OllyDbg调试器简介以及符号文件*.pdb总结(★firecat推荐★)
    VC++内存泄漏检测方法(5):使用强大的Windbg工具,重点是Symbols Path设置
    安装与配置windbg 的符号文件(转自一片文章的回复,回复者RegKiller)
    WinDbg下载符号文件(内核层、用户层)
    Windbg下载微软符号表
    windbg符号表问题
    WinDBG加载符号表的一点心得体会
  • 原文地址:https://www.cnblogs.com/zhangronghua/p/1196955.html
Copyright © 2020-2023  润新知