工厂返回泛型的实现

Hotjava

我试图使用工厂返回泛型抽象类的实现,以便调用者无需知道返回的具体类型是什么。但是失败了。

实体类

public class Car:IMoveable    { }
public interface IMoveable    { }

服务类别

public abstract class Service<TEntity>
{
   public abstract void PerformService(TEntity t);
}

public class VehicleService : Service<IMoveable>
{
     public override void PerformService(IMoveable t) {     }
}

public class DefaultService : Service<object>
{
     public override void PerformService(object t){  }
}

该工厂:

public static class ServiceFactory
{
   public static Service<TEntity> CreateService<TEntity>(TEntity entity) where TEntity : class
   {
      if (typeof(IMoveable).IsAssignableFrom(typeof(TEntity)))
      {
          // run time error here as returns null
          return  new VehicleService() as Service<TEntity>;
          //compiler error
          return (Service<TEntity>) new VehicleService();
      }
      else
      {
         return new DefaultService() as Service<TEntity>;
      }
   }
}

调用代码

static void Main(string[] args)
{
   var car = new Car();
   var service = ServiceFactory.CreateService(car);
}

问题是createService始终为null之后的服务。

我怀疑问题是TEntity作为Car传递,而VehicleService被实现为IMovebale。但是只是无法理解该怎么做,甚至有可能吗?

提前致谢。

雷纳特

您需要通过关键字TEntity泛型类型标记Servicein,并使用基本接口而不是基本抽象类,然后将其强制转换为通用基本类型即可:

public interface Service<in TEntity>
{
    void PerformService(TEntity t);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章