C#

【随记】在C#中实现泛型特化

Spread the love

在阅读一篇C#委托的文章的时候,发现了不少编码技巧,包括C#的内存公用(实现类似于Union的结构),不过其中比较亮眼的还是泛型特化的实现。之前确实没有见到类似地做法。

https://blog.uwa4d.com/archives/2072.html

大家都知道一些语言当中,例如C++中可以做到对某些泛型特化的实现,但是目前C#是不支持的。

我们可以巧妙通过泛型类的静态对象拥有自己内存的特性来实现特化,通过此技巧了类似应用还有单例模板的实现。

为了备忘,稍微写一些东西。

可以看到我的TestClass是一个泛型类。

定义了一个默认行为委托以及我们将要使用的特化委托。

在泛型类调用静态函数的时候,将需要特化的泛型委托赋值。

然后定义我们自己的函数,首先判断该函数是否存在特化实现,如果不存在的话就采用默认实现。

这就简单实现了C#的方法特化。(虽然比较笨拙,但是确实实现了特化的效果

在无GC委托的源码当中则是针对不同的值进行了不同的初始化方式,以做到防止装箱消耗的目的。

这里的invoke其实就是特化方法

_invoke实际上对应了其自定义类型的初始化方法。

而不同类型的初始化方法不同,值类型的话就可以帮助其避免装箱消耗。

可以说是比较巧妙了。不仔细看的话还真一下子没明白其用意。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.