0%

【C#】定义多泛型、泛型约束与接口并用

说起来挺智障的,今天有个需求就是实现多个泛型,但是忘了怎么写了,搜了一圈竟然没搜着,偶然看见有人提起Dictionary,心想那不就是多泛型吗,赶紧试了试发现能用,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//泛型TA中需要实现的接口
public interface IAFunc
{
A()
}

//泛型TB中需要实现的接口
public interface IBFunc
{
B()
}

//在Tag类中给两泛型TA、TB同时添加约束
public class Tag<TA,TB>
where TA:IAFunc
where TB:IBFunc
{
//做点什么...
}

然后,又发现一个更智障的问题:我想在这个Tag类中实现一个接口,但是惊讶地发现不知道该在哪写了!又是一顿搜索,仍然没找到答案,硬试,试出来了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//泛型TA中需要实现的接口
public interface IAFunc
{
void A()
}

//泛型TB中需要实现的接口
public interface IBFunc
{
void B()
}

public interface ITag
{
void C()
}

//在Tag类中给两泛型TA、TB同时添加约束
//在泛型尖括号后与where前用冒号实现接口的引用
public class Tag<TA,TB> :ITag
where TA:IAFunc
where TB:IBFunc
{
//做点什么...
//别忘了实现C()
void C(){}
}

之前还批评java的extends与implement写着麻烦,看来遇到这种高级用法的时候还是Java更直观一些。C#虽然冒号走遍天下,事一多反而不知道冒号该加哪了。