2005-01-31 Gonzalo Paniagua Javier <gonzalo@ximian.com>
[mono.git] / mcs / class / corlib / System / Object.cs
1 //
2 // System.Object.cs
3 //
4 // Author:
5 //   Miguel de Icaza (miguel@ximian.com)
6 //
7 // (C) Ximian, Inc.  http://www.ximian.com
8 //
9 //
10
11 //
12 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
13 //
14 // Permission is hereby granted, free of charge, to any person obtaining
15 // a copy of this software and associated documentation files (the
16 // "Software"), to deal in the Software without restriction, including
17 // without limitation the rights to use, copy, modify, merge, publish,
18 // distribute, sublicense, and/or sell copies of the Software, and to
19 // permit persons to whom the Software is furnished to do so, subject to
20 // the following conditions:
21 // 
22 // The above copyright notice and this permission notice shall be
23 // included in all copies or substantial portions of the Software.
24 // 
25 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
26 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
29 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
30 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
31 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
32 //
33
34 using System.Runtime.InteropServices;
35 using System.Runtime.CompilerServices;
36
37 namespace System {
38
39         [Serializable]
40         [ClassInterface (ClassInterfaceType.AutoDual)]
41         public class Object {
42
43                 // <summary>
44                 //   Compares this object to the specified object.
45                 //   Returns true if they are equal, false otherwise.
46                 // </summary>
47                 public virtual bool Equals (object o)
48                 {
49                         return this == o;
50                 }
51
52                 // <summary>
53                 //   Compares two objects for equality
54                 // </summary>
55                 public static bool Equals (object a, object b)
56                 {
57                         if (a == b)
58                                 return true;
59                         
60                         if (a == null || b == null)
61                                 return false;
62
63                         return a.Equals (b);
64                 }
65
66                 // <summary>
67                 //   Initializes a new instance of the object class.
68                 // </summary>
69                 public Object ()
70                 {
71                 }
72
73                 // <summary>
74                 //   Object destructor. 
75                 // </summary>
76                 ~Object ()
77                 {
78                 }
79
80                 // <summary>
81                 //   Returns a hashcode for this object.  Each derived
82                 //   class should return a hash code that makes sense
83                 //   for that particular implementation of the object.
84                 // </summary>
85                 public virtual int GetHashCode () {
86                         return InternalGetHashCode (this);
87                 }
88
89                 // <summary>
90                 //   Returns the Type associated with the object.
91                 // </summary>
92                 [MethodImplAttribute(MethodImplOptions.InternalCall)]
93                 public extern Type GetType ();
94
95                 // <summary>
96                 //   Shallow copy of the object.
97                 // </summary>
98                 [MethodImplAttribute(MethodImplOptions.InternalCall)]
99                 protected extern object MemberwiseClone ();
100
101                 // <summary>
102                 //   Returns a stringified representation of the object.
103                 //   This is not supposed to be used for user presentation,
104                 //   use Format() for that and IFormattable.
105                 //
106                 //   ToString is mostly used for debugging purposes. 
107                 // </summary>
108                 public virtual string ToString ()
109                 {
110                         return GetType().FullName;
111                 }
112
113                 // <summary>
114                 //   Tests whether a is equal to b.
115                 //   Can not figure out why this even exists
116                 // </summary>
117                 public static bool ReferenceEquals (object a, object b)
118                 {
119                         return (a == b);
120                 }
121
122                 [MethodImplAttribute(MethodImplOptions.InternalCall)]
123                 internal static extern int InternalGetHashCode (object o);
124
125                 [MethodImplAttribute(MethodImplOptions.InternalCall)]
126                 internal extern IntPtr obj_address ();
127  
128                 void FieldGetter (string typeName, string fieldName, ref object val)
129                 {
130                         /* never called */
131                 }
132
133                 void FieldSetter (string typeName, string fieldName, object val)
134                 {
135                         /* never called */
136                 }
137         }
138 }