Вы можете попытаться использовать ковариацию в C#, вводя ковариантный интерфейс, если ваш код позволяет это:
public interface ICustomValidator<out T> // Your new interface
{
// some code
}
public class CustomValidator< T>:ICustomValidator<T>
{
// some code
}
public abstract class Parent
{
// Change property to your new interface
public ICustomValidator<Parent> Validator { get; protected set; }
}
public class Child : Parent
{
public string Name { get; set; }
public Child()
{
Validator = new CustomValidator<Child>();
}
}
Если вы не можете создать свой ICustomValidator
интерфейс ( пометив параметр generi c ключевым словом out
) ковариантным, затем как @ Michael Randall , указанный в комментариях CustomValidator<Parent> != CustomValidator<Child>