Code Snippet
public abstract class BaseClass<T> : IEquatable<T> where T : BaseClass<T>
{
public abstract bool Equals(T other);
}
public class DerivedClass : BaseClass<DerivedClass>
{
public override bool Equals(DerivedClass other)
{
// implementation goes here!
}
}
// This compiles, but doesn't make much sense...
// Here IEquatable<T> is using the wrong type parameter
// (DerivedClass instead of DerivedClass2) because
// DerivedClass is also derived from BaseClass, and so
// passes through the type consrtaint.
public class DerivedClass2 : BaseClass<DerivedClass>
{
public override bool Equals(DerivedClass other)
{
}
}