Мало того, что это невозможно выразить, но и компилятор в любом случае не сможет применить его.Суть обобщений в том, что они могут быть проверены во время compile .Что бы вы ожидали от этого ...
BaseClass foo = new DerivedClass();
foo.CopyPropertiesFrom<BaseClass>(new OtherDerivedClass());
Компилятору известно только о foo
как BaseClass
- откуда ему знать, чтобы жаловаться, что на самом деле , вам следуетвызов foo.CopyPropertiesFrom<DerivedClass>
?
Конечно, вы можете проверить метод - но я не уверен, что я бы даже сделал его общим:
public void CopyPropertiesFrom(BaseClass other)
{
if (other.GetClass() != GetClass())
{
throw new ArgumentException("...");
}
}