Я пытаюсь написать два класса, назовите их родителями и дочерними.Наследование функций, возвращающих общие типы
родитель является абстрактным классом, который определяет функцию, которая возвращает (вид) общего типа
public abstract class Parent
{
public abstract KeyValuePair<K,V> foo(someInputs);
}
с целью в том, что ребенок может отменить эту функцию для возврата KeyValuePair с различными типами как ключ и стоимость.
public abstract class Child
{
public override KeyValuePair<string,int> foo(someInputs)
{
return(new KeyValuePair<string,int>(someInput1,someInput2);
}
}
Это достигает цели общения с пользователем развития ребенка (будущее мне), что функция должна возвращать KeyValuePair, но я свободно использовать любой KeyValuePair я хочу.
К сожалению, хотя это, кажется, единственный способ достижения этой цели является также сделать класс общим,
public abstract class Parent<K,V>
и передать K и V вплоть до абстрактной функции.
Это означает, что когда я пишу его, мне нужно определить те же типы для класса (который теперь является общим) и возвращать функцию. Если они не совпадают, компилятор сам по себе (без уважительной причины).
Есть ли способ получить эти «полу-общие» типы возврата без создания класса?
Непонятно, почему создание «родительского» родового является проблемой для вас. Почему вы пытаетесь избежать этого? –
Какой смысл делать это? В любом случае вы не можете иметь ключ KeyValuePair 'вне универсального метода/класса. Таким образом, вы никогда не можете называть 'foo' ссылкой« Parent ». Так зачем вообще помещать его в базовый класс? –
Blorgbeard