c# – 泛型类型代码中是否存在type参数的命名约定(bracy flavoured)

c# – 泛型类型代码中是否存在type参数的命名约定(bracy flavoured),第1张

概述泛型类型代码的类型参数是否有命名约定? 我现在正在做一些TypeScript,但它具有与C#,Java,AS3等相同类型的参数化. 我看到最常用的T,als in: interface Container<T> { getContent(): List<T>;} 但是如果你需要超过1种类型怎么办?我看到单个字母,通常是T,U和V.有时K,V用于映射的键和值. 当然必须有一个最好的做法吗? 泛型类型代码的类型参数是否有命名约定

我现在正在做一些TypeScript,但它具有与C#,Java,AS3等相同类型的参数化.

我看到最常用的T,als in:

interface Container<T> {    getContent(): List<T>;}

但是如果你需要超过1种类型怎么办?我看到单个字母,通常是T,U和V.有时K,V用于映射的键和值.

当然必须有一个最好的做法吗?

解决方法 一个广泛采用的标准是T1,T2,T3等,如果有超过1个未使用的泛型类型参数(也就是说,在类本身内部不知道参数的预期目的,所以你不能真正给出他们是一个更具描述性的名字).

参见Tuple类,作为一个很好的例子here.

元组具有以下形式:

Tuple<T1>Tuple<T1,T2>Tuple<T1,T3>Tuple<T1,T3,T4>Tuple<T1,T4,T5>Tuple<T1,T5,T6>Tuple<T1,T6,T7>

在这种情况下使用其他任何东西都可能会让任何阅读代码的人感到困惑.在看到T1,T3时,每个人都会知道它们是通用类型参数.

但是,对于具有预定义目的的通用参数,特定名称更合适.正如@AlexeiLevenkov所指出的,对于返回值,使用TResult将其与任何其他类型参数区分开来也很常见. Func提供了一个很好的例子,如文档here所述,下面是一个例子:

public delegate TResult Func<in T,out TResult>(    T arg)

沿着类似的路线,Dictionary使用< TKey,TValue>作为其类型参数.那是因为需要立即明确哪个是哪个.类代码不知道TKey或TValue是什么,但它确实知道它们代表键和值,因此将这些信息放在参数名称中是有意义的.

微软有一些(旧!)命名指南here,其中涵盖了另一个有趣的案例.他们建议在参数本身的名称中指出对类型参数的约束,如下所示:

public interface ISessionChannel<TSession> where TSession : ISession{    TSession Session { get; }}

在这种情况下,因为泛型参数被约束为ISession,所以通过命名参数TSession来进行通信是有意义的.

总结

以上是内存溢出为你收集整理的c# – 泛型类型代码中是否存在type参数的命名约定(bracy flavoured)全部内容,希望文章能够帮你解决c# – 泛型类型代码中是否存在type参数的命名约定(bracy flavoured)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1262019.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存