2003-03-19 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
[mono.git] / mcs / class / System.XML / System.Xml.Serialization / TypeMember.cs
1 using System;\r
2 using System.Collections;\r
3 \r
4 namespace System.Xml.Serialization\r
5 {\r
6         /// <summary>\r
7         /// TypeMember is immutable class which is used as a key in a Hashtable.\r
8         /// </summary>\r
9 \r
10         internal sealed class TypeMember\r
11         {\r
12                 Type type;\r
13                 string member;\r
14                 internal TypeMember(Type type, string member)\r
15                 {\r
16                         this.type = type;\r
17                         this.member = member;\r
18                 }\r
19 \r
20                 public override int GetHashCode()\r
21                 {\r
22                         return unchecked (type.GetHashCode() + member.GetHashCode());\r
23                 }\r
24 \r
25                 public override bool Equals(object obj)\r
26                 {\r
27                         if(obj is TypeMember)\r
28                                 return TypeMember.Equals(this,(TypeMember)obj);\r
29                         \r
30                         return false;\r
31                 }\r
32 \r
33                 public static bool Equals(TypeMember tm1, TypeMember tm2)\r
34                 {\r
35                         if(Object.ReferenceEquals(tm1,tm2))\r
36                                 return true;\r
37                         if(Object.ReferenceEquals(tm1,null) || Object.ReferenceEquals(tm2,null))\r
38                                 return false;\r
39                         if(tm1.type == tm2.type && tm1.member == tm2.member)\r
40                                 return true;\r
41                         return false;\r
42                 }\r
43 \r
44                 public static bool operator==(TypeMember tm1, TypeMember tm2)\r
45                 {\r
46                         return TypeMember.Equals(tm1,tm2);\r
47                 }\r
48 \r
49                 public static bool operator!=(TypeMember tm1, TypeMember tm2)\r
50                 {\r
51                         return !TypeMember.Equals(tm1,tm2);\r
52                 }\r
53         }\r
54 }\r