C#宏观式generics

我正在寻找一种方法来使用generics,这些generics仅在编译时存在以用于代码重用:不必复制/粘贴类和方法。 基本上是文本替换,比如宏,有一些类型检查。 更像是C ++模板。

我问的原因是:

普通的C#generics坚持总是在运行时创建generics类型(为什么??),哪些

1)不仅会产生不必要的限制(例如,不能从类型参数inheritance,这将是非常有用的),

2)但是这些运行时generics类型现在正在为我创建问题,因为.NET无法将它们序列化,因此当我将它们插入到RichTextBox中时,许多操作要么失败要么抛出“无法序列化generics类型”exception。 一切都在使用非generics类型,但我想让代码更通用以添加内容,所以我添加了generics( C#Generic Inheritance workaround ),它们打破了一切。

谢谢。

虽然C#没有C ++风格的模板,但您可以尝试使用T4(文本模板转换工具包)来模仿它们。

您的文件看起来像:

<#@ template language="C#" #> <#@ output extension=".cs" #> <# foreach (var T in new[]{"instantiate","for","these","types"}) { #> class FakeGeneric<#=T#> { <#=T#> FakeGenericField; } <# } #> 

这将生成如下类型:

 class FakeGenericinstantiate { instantiate FakeGenericField; } class FakeGenericfor { for FakeGenericField; } // etc 

在MSDN上有一个关于使用T4生成这样的代码的页面 。

它们被称为模板 (不是“宏式generics”),它们在C#中不存在

如果你有兴趣,看看D ; 它有很多模板元编程function,比C ++或C#更多(和IMO相比)。