Generic Constraints And Type Parameters Mess
- by Dummy01
Hi everyone,
I have the following base abstract class defined as:
public abstract class BaseObject<T> : IComparable, IComparable<T>, IEquatable<T> {}
I also have an interface defined as:
public interface ICode<T> where T : struct
{
T Code { get; }
}
Now I want to derive a class that is inherited from BaseObject<T> and includes interface ICode<T>.
I tried to define it like that:
public class DerivedObject<T, U> : BaseObject<T>, ICode<U> where T : DerivedObject<T, U> where U : struct
{
public DerivedObject(U code)
{
Code = code;
}
// From BaseObject
protected override int InstanceCompareTo(T obj)
{
return Code.CompareTo(obj.Code);
}
// From BaseObject
protected override bool InstanceEquals(T obj)
{
return Code.Equals(obj.Code);
}
// From ICode
U _Code;
public U Code
{
get { return _Code; }
protected set { _Code = value; }
}
}
The only error that comes from the compiler is for Code.CompareTo(obj.Code) with the message:
'U' does not contain a definition for 'CompareTo' and no extension method 'CompareTo' accepting a first argument of type 'U' could be found.
But U is a value type and should know CompareTo.
Have you any idea what I am doing wrong, or if I do all wrong?
My final aim is to derive classes such these:
public class Account : DerivedObject<Account, int>
public class ItemGroup : DerivedObject<ItemGroup, string>
Big Thanks In Advance!