• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#generic"whereconstraint"with"anygenerictype"definition? ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

Let me give example:

  1. I have some generic class/interface definition:

    interface IGenericCar< T > {...}

  2. I have another class/interface that I want to relate with class above, for example:

    interface IGarrage< TCar > : where TCar: IGenericCar< (**any type here**) > {...}

Basically, I want my generic IGarrage to be dependent on IGenericCar, regardless if it's IGenericCar<int> or IGenericCar<System.Color>, because I don't have any dependency to that type.

 

回答1

There are typically 2 ways to achieve this.

Option1: Add another parameter to IGarrage representing the T which should be passed into the IGenericCar<T> constraint:

interface IGarrage<TCar,TOther> where TCar : IGenericCar<TOther> { ... }

Option2: Define a base interface for IGenericCar<T> which is not generic and constrain against that interface

interface IGenericCar { ... }
interface IGenericCar<T> : IGenericCar { ... }
interface IGarrage<TCar> where TCar : IGenericCar { ... }

 

评论:

Ok, but what should I do if I need to use my generic type T inside the IGarage<TCar>? I can't see any possibility in option2. The best solution would be if IGarage<TCar> found type T by analysing type TCar.
– pt12lol
May 16 '15 at 7:32

 

回答2

Would it make any sense to do something like:

interface IGenericCar< T > {...}
interface IGarrage< TCar, TCarType > 
    where TCar: IGenericCar< TCarType > {...}

 

How to add a C# generic type constraint on another generic base class?

After checking that it compiles, I will upgrade it to an answer.

From your question and comments, you want the parameter to be Entity<Something>. You do not need to use the parametrized types directly as a type, it can be use to parametrize a parameter.

So just do

 public void Update(Entity<T1> entity) where ....

 

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
读书笔记_C#入门经典(第5版)第五章_变量的更多内容发布时间:2022-07-14
下一篇:
c#判断非法字符发布时间:2022-07-14
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap