`

泛型方法(C# 编程指南)

    博客分类:
  • .NET
阅读更多

泛型方法(C# 编程指南)

 

泛型方法是使用类型参数声明的方 法,如下所示:

static
 void
 Swap<T>(ref
 T lhs, ref
 T rhs)
{
    T temp;
    temp = lhs;
    lhs = rhs;
    rhs = temp;
}

下面的代码示例演示一种使用 int 作为类型参数的方法调用方式:

public
 static
 void
 TestSwap()
{
    int
 a = 1;
    int
 b = 2;

    Swap<int
>(ref
 a, ref
 b);
    System.Console.WriteLine(a + " "
 + b);
}

也可以省略类型参数,编译器将推断出该参数。下面对 Swap 的调用等效于前面的调用:

Swap(ref
 a, ref
 b);

相同的类型推断规则也适用于静态方法以及实例方法。编译器能够根据传入的方法参数 推断类型参数;它无法仅从约束或返回值推断类型参数。因此,类型推断不适用于没有参数��方法。类型推断在编译时、编译器尝试解析任何重载方法签名之前进 行。编译器向共享相同名称的所有泛型方法应用类型推断逻辑。在重载解析步骤中,编译器仅包括类型推断取得成功的那些泛型方法。

在泛型类 中,非泛型方法可以访问类级别类型参数,如下所示:

class
 SampleClass<T>
{
    void
 Swap(ref
 T lhs, ref
 T rhs) { }
}

如果定义的泛型方法接受与包含类相同的类型参数,编译器将生成警告 CS0693,因为在方法范围内,为内部 T 提供的参数将隐藏为外部 T 提供的参数。除了类初始化时提供的类型参数之外,如果需要灵活调用具有类型参数的泛型类方法,请考虑为方法的类型参数提供其他标识符,如下面示例中的 GenericList2<T> 所示。

class
 GenericList<T>
{
    // CS0693

    void
 SampleMethod<T>() { }
}

class
 GenericList2<T>
{
    //No warning

    void
 SampleMethod<U>() { }
}

使用约束对方法中的类型参数启用更专门的操作。此版本的 Swap<T> 现在称为 SwapIfGreater<T> ,它 只能与实现 IComparable<T> 的类型参数一起使用。

void
 SwapIfGreater<T>(ref
 T lhs, ref
 T rhs) where
 T : System.IComparable<T>
{
    T temp;
    if
 (lhs.CompareTo(rhs) > 0)
    {
        temp = lhs;
        lhs = rhs;
        rhs = temp;
    }
}

泛型方法可以使用许多类型参数进行重载。例如,下列方法可以全部存在于同一个类 中:

void
 DoWork() { }
void
 DoWork<T>() { }
void
 DoWork<T, U>() { }

分享到:
评论

相关推荐

    C# 编程指南 C# 随身参考 Wego开发组专用

    泛型(C# 编程指南) LINQ 查询表达式(C# 编程指南) Lambda 表达式(C# 编程指南) 迭代器(C# 编程指南) 命名空间(C# 编程指南) 可空类型(C# 编程指南) 不安全代码和指针(C# 编程指南) XML ...

    C# 编程指南 [微软官方 MSDN 节选]

    泛型(C# 编程指南) LINQ 查询表达式(C# 编程指南) Lambda 表达式(C# 编程指南) 迭代器(C# 编程指南) 命名空间(C# 编程指南) 可空类型(C# 编程指南) 不安全代码和指针(C# 编程指南) XML 文档注释(C# ...

    MSDN CS参考.zip

    泛型(C# 编程指南) LINQ 查询表达式(C# 编程指南) Lambda 表达式(C# 编程指南) 迭代器(C# 编程指南) 命名空间(C# 编程指南) 可空类型(C# 编程指南) 不安全代码和指针(C# 编程指南) X

    c#编程指南

    《C#编程指南》在介绍基础部分时,保留了用途较广的属性、接口、泛型的原理分析,舍去了与c++类似的内容。《C#编程指南》着重讨论新技术和热点领域,包括语言集成查询(LINQ)、WPF 3D动画、对象关系设计器(O/R...

    C#4.0权威指南.pd

    语法篇对C#的语法进行了系统而全面的讲解,包括标识符和关键字、变量和常量、类型以及类型转换、表达式和运算符、语句、方法、类、继承、多态、接口、结构、枚举、委托、事件、泛型、数组、集合、字符串和正则表达式...

    C# 4.0权威指南-姜晓东

    语[0法0]篇对C#的语[0法0]进行了系统而全面的讲解,包括标识符和关键字、变量和常量、类型以及类型转换、表达式和运算符、语句、方[0法0]、类、继承、多态、接口、结构、枚举、委托、事件、泛型、数组、集合、字符串...

    Microsoft Visual C# 2008从入门到精通

    Visual C# 2008新增了大量可圈可点的丰富特性,本书围绕着基础知识和这些新特性全面介绍了如何利用Visual Studio 2008和.net framework来进行C#编程。书中沿袭深受读者欢迎的Step by Step风格,通过丰富的练习引导...

    Microsoft.Visual.C#.2010.Step.by.Step].(John.Sharp).中英文文字版

    探索变量、语句、操作符和方法,创建第一个Windows Presentation Foundation应用程序构建用户界面(UI),验证数据输入管理错误和处理异常使用垃圾回收来管理内存资源使用泛型,构建新的类型,创建可重用的组件使用...

    CLR via C#第三版中文.pdf

    《CLR via C#(第3版)》深入、全面探讨.NET Framework、CLR和多核编程,广泛讨论Framework Class Library(FCL)核心类型,对泛型和线程处理等深奥难懂的开发概念提供权威、实用的指导 自下而上,由浅入深掌握CLR和...

    CLR.via.Csharp.4th.Edition.Oct.2012.pdf

    作者: Jeffrey Richter 出版社: Microsoft Press 日期: November 2012 (est.) 主要更新 深入学习并精通CLR、C#和.NET开发。Jeffrey Richter 长期担任Microsoft .NET...泛型、线程等重点、难点知识学习开发的权威指南

    asp.net知识库

    C#静态成员和方法的学习小结 C#中结构与类的区别 C#中 const 和 readonly 的区别 利用自定义属性,定义枚举值的详细文本 Web标准和ASP.NET - 第一部分 XHTML介绍 在ASP.NET页面中推荐使用覆写(Override)而不是事件...

    NET设计规范-.NET约定、惯用法与模式.part2

    附录A C#编程风格约定 255 A.1 通用风格约定 255 A.1.1 花括号的使用 255 A.1.2 空格的使用 257 A.1.3 缩进的使用 259 A.2 命名约定 259 A.3 注释 260 A.4 文件的组织 261 附录B 通过FxCop来实施...

    NET设计规范-.NET约定、惯用法与模式.part1

    附录A C#编程风格约定 255 A.1 通用风格约定 255 A.1.1 花括号的使用 255 A.1.2 空格的使用 257 A.1.3 缩进的使用 259 A.2 命名约定 259 A.3 注释 260 A.4 文件的组织 261 附录B 通过FxCop来实施...

    .NET设计规范:约定、惯用法与模式(第2版)克瓦林纳 5/5

    清晰完整PDF版本,是我从网上买来的,是第二版,在 CSDN 上只有我整个是清晰完整的。 共 50MB,分为5个分卷 ...附录A C#编程风格约定 附录B 通过FxCop来实施设计规范 附录C API规格书样例 术语表 推荐读物

Global site tag (gtag.js) - Google Analytics