1
+ using System ;
2
+
3
+ namespace UnitsNet
4
+ {
5
+ public struct Area
6
+ {
7
+ private const double SquareKilometersToSquareMetersRatio = 1E6 ;
8
+ private const double SquareDecimetersToSquareMetersRatio = 1E-2 ;
9
+ private const double SquareCentimetersToSquareMetersRatio = 1E-4 ;
10
+ private const double SquareMillimetersToSquareMetersRatio = 1E-6 ;
11
+
12
+ public readonly double SquareMeters ;
13
+
14
+ public Area ( double squareMeters )
15
+ {
16
+ SquareMeters = squareMeters ;
17
+ }
18
+
19
+ #region Unit Properties
20
+
21
+ public double SquareKilometers
22
+ {
23
+ get { return SquareMeters / SquareKilometersToSquareMetersRatio ; }
24
+ }
25
+
26
+ public double SquareDecimeters
27
+ {
28
+ get { return SquareMeters / SquareDecimetersToSquareMetersRatio ; }
29
+ }
30
+
31
+ public double SquareCentimeters
32
+ {
33
+ get { return SquareMeters / SquareCentimetersToSquareMetersRatio ; }
34
+ }
35
+
36
+ public double SquareMillimeters
37
+ {
38
+ get { return SquareMeters / SquareMillimetersToSquareMetersRatio ; }
39
+ }
40
+
41
+ #endregion
42
+
43
+ #region Static
44
+
45
+ /// <summary>
46
+ /// The maximum representable area in square meters.
47
+ /// </summary>
48
+ public static Area Max
49
+ {
50
+ get { return new Area ( double . MaxValue ) ; }
51
+ }
52
+
53
+ /// <summary>
54
+ /// The smallest representable area in square meters.
55
+ /// </summary>
56
+ public static Area Min
57
+ {
58
+ get { return new Area ( double . MinValue ) ; }
59
+ }
60
+
61
+ public static Area Zero
62
+ {
63
+ get { return new Area ( ) ; }
64
+ }
65
+
66
+ public static Area FromSquareKilometers ( double squareKilometers )
67
+ {
68
+ return new Area ( squareKilometers * SquareKilometersToSquareMetersRatio ) ;
69
+ }
70
+
71
+ public static Area FromSquareMeters ( double squareMeters )
72
+ {
73
+ return new Area ( squareMeters ) ;
74
+ }
75
+
76
+ public static Area FromSquareDecimeters ( double squareDecimeters )
77
+ {
78
+ return new Area ( squareDecimeters * SquareDecimetersToSquareMetersRatio ) ;
79
+ }
80
+
81
+ public static Area FromSquareCentimeters ( double squareCentimeters )
82
+ {
83
+ return new Area ( squareCentimeters * SquareCentimetersToSquareMetersRatio ) ;
84
+ }
85
+
86
+ public static Area FromSquareMillimeters ( double squareMillimeters )
87
+ {
88
+ return new Area ( squareMillimeters * SquareMillimetersToSquareMetersRatio ) ;
89
+ }
90
+
91
+ #endregion
92
+
93
+ #region Arithmetic operators
94
+
95
+ public static Area operator - ( Area right )
96
+ {
97
+ return FromSquareMeters ( - right . SquareMeters ) ;
98
+ }
99
+
100
+ public static Area operator + ( Area left , Area right )
101
+ {
102
+ return FromSquareMeters ( left . SquareMeters + right . SquareMeters ) ;
103
+ }
104
+
105
+ public static Area operator - ( Area left , Area right )
106
+ {
107
+ return FromSquareMeters ( left . SquareMeters - right . SquareMeters ) ;
108
+ }
109
+
110
+ public static Area operator * ( double left , Area right )
111
+ {
112
+ return FromSquareMeters ( left * right . SquareMeters ) ;
113
+ }
114
+
115
+ public static Area operator * ( Area left , double right )
116
+ {
117
+ return FromSquareMeters ( left . SquareMeters * right ) ;
118
+ }
119
+
120
+ public static Area operator / ( Area left , double right )
121
+ {
122
+ return FromSquareMeters ( left . SquareMeters / right ) ;
123
+ }
124
+
125
+ public static double operator / ( Area left , Area right )
126
+ {
127
+ return left . SquareMeters / right . SquareMeters ;
128
+ }
129
+
130
+ #endregion
131
+
132
+ #region Comparable operators
133
+
134
+ public static bool operator <= ( Area left , Area right )
135
+ {
136
+ return left . SquareMeters <= right . SquareMeters ;
137
+ }
138
+
139
+ public static bool operator >= ( Area left , Area right )
140
+ {
141
+ return left . SquareMeters >= right . SquareMeters ;
142
+ }
143
+
144
+ public static bool operator < ( Area left , Area right )
145
+ {
146
+ return left . SquareMeters < right . SquareMeters ;
147
+ }
148
+
149
+ public static bool operator > ( Area left , Area right )
150
+ {
151
+ return left . SquareMeters > right . SquareMeters ;
152
+ }
153
+
154
+ public static bool operator == ( Area left , Area right )
155
+ {
156
+ return left . SquareMeters == right . SquareMeters ;
157
+ }
158
+
159
+ public static bool operator != ( Area left , Area right )
160
+ {
161
+ return ! ( left . SquareMeters == right . SquareMeters ) ;
162
+ }
163
+
164
+ #endregion
165
+
166
+ #region Equality / IComparable
167
+
168
+ public int CompareTo ( object obj )
169
+ {
170
+ if ( obj == null ) throw new ArgumentNullException ( "obj" ) ;
171
+ if ( ! ( obj is Area ) ) throw new ArgumentException ( "Expected type Area." , "obj" ) ;
172
+ return CompareTo ( ( Area ) obj ) ;
173
+ }
174
+
175
+ public int CompareTo ( Area other )
176
+ {
177
+ return SquareMeters . CompareTo ( other . SquareMeters ) ;
178
+ }
179
+
180
+ public override bool Equals ( object obj )
181
+ {
182
+ if ( obj == null || ! ( obj is Area ) )
183
+ {
184
+ return false ;
185
+ }
186
+
187
+ return SquareMeters . CompareTo ( ( ( Area ) obj ) . SquareMeters ) == 0 ;
188
+ }
189
+
190
+ public override int GetHashCode ( )
191
+ {
192
+ return base . GetHashCode ( ) ;
193
+ }
194
+
195
+ #endregion
196
+
197
+ public override string ToString ( )
198
+ {
199
+ return SquareMeters + " m²" ;
200
+ }
201
+ }
202
+ }
0 commit comments