Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/corert.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Van Patten <jvp@justinvp.com>2016-09-19 23:12:48 +0300
committerJan Kotas <jkotas@microsoft.com>2016-09-19 23:12:48 +0300
commit6da545661390b1cc05041ab101f7e939448817a2 (patch)
tree7dfafa0edc630dfa9528bbd2c29cd398ff6da23f
parent36a78d03720966ccd37c9ea464b9f7f362506be8 (diff)
Version: Make fields readonly and delete duplicate code (#1874)
Change `Version`'s fields to `readonly` to better guarantee its immutability, and remove duplicate code.
-rw-r--r--src/System.Private.CoreLib/src/System/Version.cs112
1 files changed, 31 insertions, 81 deletions
diff --git a/src/System.Private.CoreLib/src/System/Version.cs b/src/System.Private.CoreLib/src/System/Version.cs
index c3cba9490..4ee305018 100644
--- a/src/System.Private.CoreLib/src/System/Version.cs
+++ b/src/System.Private.CoreLib/src/System/Version.cs
@@ -18,10 +18,10 @@ namespace System
public sealed class Version : IComparable, IComparable<Version>, IEquatable<Version>, ICloneable
{
// AssemblyName depends on the order staying the same
- private int _Major;
- private int _Minor;
- private int _Build = -1;
- private int _Revision = -1;
+ private readonly int _Major;
+ private readonly int _Minor;
+ private readonly int _Build = -1;
+ private readonly int _Revision = -1;
public Version(int major, int minor, int build, int revision)
{
@@ -84,9 +84,19 @@ namespace System
_Revision = v.Revision;
}
+ private Version(Version version)
+ {
+ Debug.Assert(version != null);
+
+ _Major = version._Major;
+ _Minor = version._Minor;
+ _Build = version._Build;
+ _Revision = version._Revision;
+ }
+
public object Clone()
{
- return new Version(_Major, _Minor, _Build, _Revision);
+ return new Version(this);
}
// Properties for setting and getting version numbers
@@ -133,94 +143,34 @@ namespace System
throw new ArgumentException(SR.Arg_MustBeVersion);
}
- if (_Major != v._Major)
- if (_Major > v._Major)
- return 1;
- else
- return -1;
-
- if (_Minor != v._Minor)
- if (_Minor > v._Minor)
- return 1;
- else
- return -1;
-
- if (_Build != v._Build)
- if (_Build > v._Build)
- return 1;
- else
- return -1;
-
- if (_Revision != v._Revision)
- if (_Revision > v._Revision)
- return 1;
- else
- return -1;
-
- return 0;
+ return CompareTo(v);
}
public int CompareTo(Version value)
{
- if (value == null)
- return 1;
-
- if (_Major != value._Major)
- if (_Major > value._Major)
- return 1;
- else
- return -1;
-
- if (_Minor != value._Minor)
- if (_Minor > value._Minor)
- return 1;
- else
- return -1;
-
- if (_Build != value._Build)
- if (_Build > value._Build)
- return 1;
- else
- return -1;
-
- if (_Revision != value._Revision)
- if (_Revision > value._Revision)
- return 1;
- else
- return -1;
-
- return 0;
+ return
+ object.ReferenceEquals(value, this) ? 0 :
+ object.ReferenceEquals(value, null) ? 1 :
+ _Major != value._Major ? (_Major > value._Major ? 1 : -1) :
+ _Minor != value._Minor ? (_Minor > value._Minor ? 1 : -1) :
+ _Build != value._Build ? (_Build > value._Build ? 1 : -1) :
+ _Revision != value._Revision ? (_Revision > value._Revision ? 1 : -1) :
+ 0;
}
public override bool Equals(Object obj)
{
- Version v = obj as Version;
- if (v == null)
- return false;
-
- // check that major, minor, build & revision numbers match
- if ((_Major != v._Major) ||
- (_Minor != v._Minor) ||
- (_Build != v._Build) ||
- (_Revision != v._Revision))
- return false;
-
- return true;
+ return Equals(obj as Version);
}
public bool Equals(Version obj)
{
- if (obj == null)
- return false;
-
- // check that major, minor, build & revision numbers match
- if ((_Major != obj._Major) ||
- (_Minor != obj._Minor) ||
- (_Build != obj._Build) ||
- (_Revision != obj._Revision))
- return false;
-
- return true;
+ return object.ReferenceEquals(obj, this) ||
+ (!object.ReferenceEquals(obj, null) &&
+ _Major == obj._Major &&
+ _Minor == obj._Minor &&
+ _Build == obj._Build &&
+ _Revision == obj._Revision);
}
public override int GetHashCode()