You can't derive from from sealed classes or, in this case, from value types
(structs).
System.Int32 is a struct.
We use this kind of types in out apps, hope it helps:
struct RangeInt0to13 : IComparable, IFormattable, IConvertible,
IComparable<int>, IEquatable<int>
{
private int thisValue;
public const int MinValue = 0;
public const int MaxValue = 13;
private RangeInt0to13(int Value)
{
if (Value >= MinValue && Value <= MaxValue)
thisValue = Value;
else
throw new ArgumentOutOfRangeException("This type accepts
values from "+MinValue+" to " + MaxValue);
}
#region ObjectOverrides
public override int GetHashCode()
{
return thisValue.GetHashCode();
}
public override bool Equals(object obj)
{
return thisValue.Equals(obj);
}
#endregion
#region Helpers
public static RangeInt0to13 Parse(string s)
{
return new RangeInt0to13(int.Parse(s));
}
public static RangeInt0to13 Parse(string s, IFormatProvider
provider)
{
return new RangeInt0to13(int.Parse(s,provider));
}
public static RangeInt0to13 Parse(string s, NumberStyles style)
{
return new RangeInt0to13(int.Parse(s,style));
}
public static RangeInt0to13 Parse(string s, NumberStyles style,
IFormatProvider provider)
{
return new RangeInt0to13(int.Parse(s, style,provider));
}
public static bool TryParse(string s, out RangeInt0to13 result)
{
int tempInt;
bool retVal=int.TryParse(s, out tempInt);
result = default(int);
if (retVal == true)
{
try { result = new RangeInt0to13(tempInt); }
catch (ArgumentOutOfRangeException) { retVal = false; }
}
return retVal;
}
public static bool TryParse(string s, NumberStyles style,
IFormatProvider provider, out RangeInt0to13 result)
{
int tempInt;
result = default(int);
bool retVal = int.TryParse(s, style, provider, out tempInt);
if (retVal == true)
{
try { result = new RangeInt0to13(tempInt); }
catch (ArgumentOutOfRangeException) { retVal = false; }
}
return retVal;
}
#endregion
#region Conversions
public static implicit operator RangeInt0to13(int NewValue)
{
return new RangeInt0to13(NewValue);
}
public static implicit operator int(RangeInt0to13 NewValue)
{
return
NewValue.ToInt32(System.Globalization.CultureInfo. CurrentCulture.NumberFormat);
}
public override string ToString()
{
return thisValue.ToString();
}
#endregion
#region IEquatable<intMembers
public bool Equals(int other)
{
return thisValue.Equals(other);
}
#endregion
#region IComparable<intMembers
public int CompareTo(int other)
{
return thisValue.CompareTo(other);
}
#endregion
#region IConvertible Members
public TypeCode GetTypeCode()
{
return thisValue.GetTypeCode();
}
public bool ToBoolean(IFormatProvider provider)
{
return Convert.ToBoolean(thisValue, provider);
}
public byte ToByte(IFormatProvider provider)
{
return Convert.ToByte(thisValue, provider);
}
public char ToChar(IFormatProvider provider)
{
return Convert.ToChar(thisValue, provider);
}
public DateTime ToDateTime(IFormatProvider provider)
{
return Convert.ToDateTime(thisValue, provider);
}
public decimal ToDecimal(IFormatProvider provider)
{
return Convert.ToDecimal(thisValue, provider);
}
public double ToDouble(IFormatProvider provider)
{
return Convert.ToDouble(thisValue, provider);
}
public short ToInt16(IFormatProvider provider)
{
return Convert.ToInt16(thisValue, provider);
}
public int ToInt32(IFormatProvider provider)
{
return Convert.ToInt32(thisValue, provider);
}
public long ToInt64(IFormatProvider provider)
{
return Convert.ToInt64(thisValue, provider);
}
public sbyte ToSByte(IFormatProvider provider)
{
return Convert.ToSByte(thisValue, provider);
}
public float ToSingle(IFormatProvider provider)
{
return Convert.ToSingle(thisValue, provider);
}
public string ToString(IFormatProvider provider)
{
return thisValue.ToString(provider);
}
public object ToType(Type conversionType, IFormatProvider provider)
{
return Convert.ChangeType(thisValue, conversionType, provider);
}
public ushort ToUInt16(IFormatProvider provider)
{
return Convert.ToUInt16(thisValue, provider);
}
public uint ToUInt32(IFormatProvider provider)
{
return Convert.ToUInt32(thisValue, provider);
}
public ulong ToUInt64(IFormatProvider provider)
{
return Convert.ToUInt64(provider);
}
#endregion
#region IFormattable Members
public string ToString(string format, IFormatProvider
formatProvider)
{
return thisValue.ToString(format, formatProvider);
}
#endregion
#region IComparable Members
public int CompareTo(object obj)
{
return thisValue.CompareTo(obj);
}
#endregion
}
<sh******@yahoo.com.auha scritto nel messaggio
news:11*********************@o5g2000hsb.googlegrou ps.com...
Claes,
Thanks for the pointer. Tried the following
public class myint : int
{
public const ushort MaxValue = 16;
public const ushort MinValue = 0;
}
But I am still missing something as I get an error about cannot derive
from sealed type int.
Mark.