C# 宏风格泛型

2024-03-29

我正在寻找一种方法来拥有仅在编译时存在的泛型,以实现代码重用:不必复制/粘贴类和方法。基本上只是文本替换,就像宏一样,带有一些类型检查。更像是 C++ 模板。

我问的原因:

普通的 C# 泛型坚持始终在运行时创建泛型类型(为什么??),这

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

2) 但这些运行时泛型类型现在给我带来了问题,因为 .NET 无法序列化它们,因此当我将它们插入 RichTextBox 时,许多操作要么失败,要么抛出“无法序列化泛型类型”异常。一切都适用于非泛型类型,但我想让代码更通用以添加东西,所以我添加了泛型(C# 通用继承解决方法 https://stackoverflow.com/questions/6090432/c-generic-inheritance-workaround),他们正在破坏一切。

Thanks.


虽然 C# 没有 C++ 风格的模板,但您可以尝试使用T4(文本模板转换工具包) http://msdn.microsoft.com/en-us/library/bb126445.aspx来模仿他们。

你的文件看起来像:

<#@ 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

There's MSDN 上有关使用 T4 生成代码的页面 http://msdn.microsoft.com/en-us/library/dd820620.aspx像这样。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 宏风格泛型 的相关文章

随机推荐