C# generic "where constraint" with "any generic type" definition?

互联网 2021/10/13 17:44:11

C# generic "where constraint" with "any generic type" definition?Let me give example:I have some generic class/interface definition: interface IGenericCar< T > {...}I have another class/interface that I want to relate with c…

C# generic "where constraint" with "any generic type" definition?

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 ....

 

 

 

随时随地学软件编程-关注百度小程序和微信小程序
关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。
本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。
[C# generic "where constraint" with "any generic type" definition?]http://www.zyiz.net/tech/detail-240907.html

上一篇:C#、Qt、MFC,写上位机优先选哪个?

下一篇:C#sql语句规范

赞(0)
关注微信小程序
程序员编程王-随时随地学编程

扫描二维码或查找【程序员编程王】

可以随时随地学编程啦!

技术文章导航 更多>
扫一扫关注最新编程教程