main
1using System;
2
3namespace gorilla.commons.utility
4{
5 [Serializable]
6 public class Id<T>
7 {
8 static public readonly Id<T> Default = new Id<T>(default(T));
9 public T id { get; private set; }
10
11 public Id(T id)
12 {
13 this.id = id;
14 }
15
16 static public implicit operator Id<T>(T id)
17 {
18 return new Id<T>(id);
19 }
20
21 static public implicit operator T(Id<T> id)
22 {
23 return id.id;
24 }
25
26 public bool Equals(Id<T> other)
27 {
28 if (ReferenceEquals(null, other)) return false;
29 if (ReferenceEquals(this, other)) return true;
30 return Equals(other.id, id);
31 }
32
33 public override bool Equals(object obj)
34 {
35 if (ReferenceEquals(null, obj)) return false;
36 if (ReferenceEquals(this, obj)) return true;
37 if (obj.GetType() != typeof (Id<T>)) return false;
38 return Equals((Id<T>) obj);
39 }
40
41 public override int GetHashCode()
42 {
43 return id.GetHashCode();
44 }
45 }
46}