//------------------------------------------------------------------------------ // // System.OperatingSystem.cs // // Copyright (C) 2001 Moonlight Enterprises, All Rights Reserved // // Author: Jim Richardson, develop@wtfo-guru.com // Created: Saturday, August 11, 2001 // //------------------------------------------------------------------------------ using System; using System.Globalization; namespace System { /// /// Class representing a specific operating system version for a specific platform /// [Serializable] public sealed class OperatingSystem : ICloneable { private System.PlatformID itsPlatform; private Version itsVersion; public OperatingSystem(PlatformID platform, Version version) { if(version == null) { throw new ArgumentNullException(); } itsPlatform = platform; itsVersion = version; } /// /// Get the PlatformID /// public PlatformID Platform { get { return itsPlatform; } } /// /// Gets the version object /// public Version Version { get { return itsVersion; } } /// /// Return a clone of this object /// public object Clone() { return new OperatingSystem(itsPlatform, itsVersion); } /// /// Return true if obj equals this object /// public override bool Equals(object obj) { //Check for null and compare run-time types. if (obj == null || GetType() != obj.GetType()) return false; OperatingSystem os = (OperatingSystem)obj; return (itsPlatform == os.itsPlatform) && (os.itsVersion.Equals(itsVersion)); } /// /// Return hash code /// public override int GetHashCode() { // this leave us enuf for 256 unique platforms which should suffice for a good while return ((int)itsPlatform << 24) | itsVersion.GetHashCode() >> 8; } /// /// Return a string reprentation of this instance /// public override string ToString() { string str; switch(itsPlatform) { case System.PlatformID.Win32NT: str = "Microsoft Windows NT"; break; case System.PlatformID.Win32S: str = "Microsoft Win32S"; break; case System.PlatformID.Win32Windows: str = "Microsoft Windows 98"; break; case System.PlatformID.Unix: str = "Unix"; break; default: str = Locale.GetText (""); break; } return str + " " + itsVersion.ToString(); } } }