多态和泛型类

时间:2019-01-07 10:13:18

标签: c# oop polymorphism

我有一个在通用响应中返回派生类的函数,该函数的签名对于某些派生类是公用的:

防御等级:

 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 :(得分:0)

不允许您使用不同的通用参数来映射GenericClass。

通用类不知道如何转换它们。

$ipfile = "ips.txt";
$ips = explode("\n",file_get_contents($ipfile));
$isban = 0;
foreach($ips as $ip) {
    $ip = explode(" ",$ip,2);
    if($_SERVER['REMOTE_ADDR'] == $ip['0']) {
        $isban++; 
    }
}
if(!empty($isban))
{
    die("IP IS BANNED!");
}
else
{
    $ips[] = $_SERVER['REMOTE_ADDR']." ".date("d/m/y");
    $ips = implode("\n",$ips);
    file_put_contents($ipfile,$ips);
    header('Content-Type: text/html; charset=UTF-8');
    header('Location: http://www.google.com/');
    exit;
}

答案 1 :(得分:0)

正如kara所提到的,您不能将GenericClasses映射为具有不同的泛型参数。 但是您可以执行类似于以下示例的操作。

假设您的GenericClass看起来像:

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

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

您在DerivedClass中的Func看起来像

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