代码之家  ›  专栏  ›  技术社区  ›  Kgn-web

如何在子类中具有多个泛型类型

  •  1
  • Kgn-web  · 技术社区  · 6 年前

    public abstract class BaseController<T> : ApiController 
    {
    
        protected APIResponseTO<T> _reponse;
    
        protected IHttpActionResult CreateResponse(HttpStatusCode httpStatus, T data)
        {
            _reponse = new APIResponseTO<T>()
            {
                HttpStatus = httpStatus,
                Data = data
            };
            return Ok(_reponse);
        }
    }
    

    现在我希望继承这个类的任何类都可以为T定义多个类型

     public class CustomerController : BaseController<T>
     {
    
        public IHttpActionResult Get()
        {
    
            var customers = _customerService.GetCustomers();
            //call Parent Class CreateResponse() to create IHttpActionResult object
            //here customers is IEnumerable<Customer>
            return CreateResponse(HttpStatusCode.Created, customers)
        }
    
        public IHttpActionResult Post([FromBody]Customer customer)
        {
            var custId= _customerService.AddCustomers();
            //call Parent Class CreateResponse() to create IHttpActionResult object
            //here customer is integer(Single Object)
            return CreateResponse(HttpStatusCode.Created, custId)
        }
    }
    

    public class CustomerController : BaseController<T> where T : Customer, IEnumerable<Customer>, int
     {
     }
    

     public IHttpActionResult Post<T>([FromBody]Customer customer)
      where T : int
        {
            var custId= _customerService.AddCustomers();
            //call Parent Class CreateResponse() to create IHttpActionResult object
            //here customer is integer(Single Object)
            return CreateResponse(HttpStatusCode.Created, custId)
        }
    

    2 回复  |  直到 6 年前
        1
  •  2
  •   Haytam    6 年前


    public class CustomerController : BaseController
    {
    
        public IHttpActionResult Get()
        {
    
            var customers = new List<object>();
            return CreateResponse<List<object>>(HttpStatusCode.Created, customers);
        }
    
        public IHttpActionResult Post([FromBody]Customer customer)
        {
            int custId = 17;
            return CreateResponse<int>(HttpStatusCode.Created, custId);
        }
    }
    
    public abstract class BaseController : ApiController
    {
    
        protected IHttpActionResult CreateResponse<TData>(HttpStatusCode httpStatus, TData data)
        {
            // Problem here is that BaseController is not a generic class anymore, so you can't store your responses but then again, why would you want to store them in a variable?
            var reponse = new APIResponseTO<TData>()
            {
                HttpStatus = httpStatus,
                Data = data
            };
    
            return Ok(reponse);
        }
    }
    

        2
  •  0
  •   htshame    6 年前

    <T>

    public class CustomerController<T> : BaseController<T> where T : Customer, IEnumerable<Customer>, int {
    }