public class MyClass<T> {
AllOf<T, MyOtherClass> Value { get; set; }
}
// some function
void Test() {
MyClass<IEquatable> m = new MyClass<IEquatable>();
m.Value = new SomeClassA(); // compile error, does not inherit MyOtherClass
m.Value = new SomeClassB(); // compile error, does not implement IEquatable
m.Value = new SomeClassC(); // success
}
public class SomeClassA : IEquatable { }
public class SomeClassB : MyOtherClass { }
public class SomeClassC : MyOtherClass, IEquatable { }
public class MyClass<T> {
AllOf<T, MyOtherClass> Value { get; set; }
}
// some function
void Test() {
MyClass<IEquatable> m = new MyClass<IEquatable>();
m.Value = new SomeClassA(); // compile error, does not inherit MyOtherClass
m.Value = new SomeClassB(); // compile error, does not implement IEquatable
m.Value = new SomeClassC(); // success
}
public class SomeClassA : IEquatable { }
public class SomeClassB : MyOtherClass { }
public class SomeClassC : MyOtherClass, IEquatable { }