полиморфизм и родовой класс - PullRequest
0 голосов
/ 07 января 2019

У меня есть функция, которая возвращает производный класс в общем ответе, подпись функции является общей для некоторых производных классов:

классы по определению:

 public class BaseClass
 {
   int {get;set;}
 }
 public class DerivedClass : BaseClass
 {
    int b {get;set;}
 }

Функция в базовом классе:

 public class BaseRepository 
 {
     public virtual GenericClass<BaseClass> Func()
     {
        return null;
     }
 }

Функция в производном классе:

public class Repository : BaseRepository
{

     public override GenericClass<BaseClass> Func()
     {
         var response  = new GenericClass<DerivedClass> ();
         //TODO
         return response;
      }
 }

Я получаю это сообщение об ошибке:

 cannot implicitly convert type 'GenericClass<DerivedClass>' to 
 'GenericClass<DerivedClass>'

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Как упомянуто kara, вы не можете отобразить GenericClasses с другими общими параметрами. Но вы можете сделать что-то похожее на приведенный ниже пример.

Предполагая, что ваш GenericClass выглядит следующим образом:

public class GenericClass<T>
{
    T myProperty { get; set; }

    public GenericClass(T myProperty)
    {
        this.myProperty = myProperty;
    }
}

Ваш Func в DerivedClass может выглядеть как

public override GenericClass<BaseClass> Func()
{
   var response = new GenericClass<BaseClass>(this);
   //TODO
   return response;
}
0 голосов
/ 07 января 2019

Вам не разрешено отображать GenericClasses с другими общими параметрами.

Универсальный класс не знает, как их разыграть.

// Is not allowed..
List<object> l = new List<string>();

// Use a method to explain your class how to convert.
List<object> l = new List<string>().ToList<object>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...