泛型编程

理论点:

声明一个具体的泛型类时,编译器会至少做一个全面的字面上的类型替换,将T替换成具体的类型参数。但不仅仅字面上的替换,还包括全面的语义上的替换,做类型检查,检查T是否为有效的指定类型。

如何使用:

1. 普通方法与泛型方法

// 普通方法
static void Swap(ref string a, ref string b)
{
      T c = a;
      a = b;
      b = c;
}

// 泛型方法
static void Swap<T>(ref T a, ref T b)
{
      T c = a;
      a = b;
      b = c;
}

2.

泛型类的类型参数与内部泛型函数的类型参数不能相同。如果内部的泛型函数需要使用其他的类型参数,请考虑换一个标识符。

class GenericList<T>
{
    // CS0693
    void SampleMethod<T>() { }
}

class GenericList2<T>
{
    //No warning
    void SampleMethod<U>() { }
}

3. 对类型参数的约束

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;
    }
}

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

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

5. 一个典型的泛型类示例

public class List<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable
{

    public void CopyTo(T[] array);

    public int FindIndex(Predicate<T> match);

    public int IndexOf(T item);

    public void Sort(Comparison<T> comparison);

    public void Sort(IComparer<T> comparer);

}

参考文章:

http://msdn.microsoft.com/zh-cn/library/vstudio/twcad0zb.aspx

时间: 2024-08-29 08:21:40

泛型编程的相关文章

C++ 模板与泛型编程

<C++ Primer 4th>读书笔记 所谓泛型编程就是以独立于任何特定类型的方式编写代码.泛型编程与面向对象编程一样,都依赖于某种形式的多态性. 面向对象编程中的多态性在运行时应用于存在继承关系的类.我们能够编写使用这些类的代码,忽略基类与派生类之间类型上的差异. 在泛型编程中,我们所编写的类和函数能够多态地用于跨越编译时不相关的类型.一个类或一个函数可以用来操纵多种类型的对象. 面向对象编程所依赖的多态性称为运行时多态性,泛型编程所依赖的多态性称为编译时多态性或参数式多态性. 模板是泛型

java泛型编程

一般的类和方法都是针对特定数据类型的,当写一个对多种数据类型都适用的类和方法时就需要使用泛型编程,java的泛型编程类似于C++中的模板,即一种参数化类型的编程方法,具体地说就是将和数据类型相关的信息抽象出来,主要提供通用的实现和逻辑,和数据类型相关的信息由使用时参数决定. 一.泛型类: 栈的实现 示例代码: package com.genericity; import org.junit.Test; /** * @Title: LinkedListStack.java * @Package c

C++中模板与泛型编程

目录 定义一个通用模板 模板特化和偏特化 模板实例化与匹配 可变参数模板 泛型编程是指独立与任何类型的方式编写代码.泛型编程和面向对象编程,都依赖与某种形式的多态.面向对象编程的多态性在运行时应用于存在继承关系的类,一段代码可以可以忽略基类和派生类之间的差异.在泛型编程中,编写的代码可以用作多种类型的对象.面向对象编程所依赖的多态性称为运行时多态性,泛型编程所依赖的多态性称为编译时多态性或参数式多态性. 1 模板定义 1.1 函数模板 模板定义以关键字 template 开始,后接模板形参表,模

泛型编程(模板)

;泛型编程 即是广泛的类型编程的意思,常常用于那些函数重复编写但只有参数类型或者返回值不同,常用泛型编程解决,C语言呢用宏解决 ;c++实现泛型编程用templeate模板来实现,其实就是代码的复制,当编译器扫描到模板初始化语法那么就会在当前文件中实例化一个函数或者类到本文件中,实例化的模板是存在实体的所以可以调试,而模板是不存在实体的,宏替换之后也不存在实体 函数模板(只写函数的实现而不关心其类型,类型通过外部初始化的时候增加一个叫做类型的参数来初始化一个函数模板或者类模板), 定义:每个函数

【C/C++学院】(11)泛型编程/函数模板/类模板

1.泛型编程基础 #include "iostream" using namespace std; void swap(int &a, int &b) { int c; c = a; a = b; b = c; } void swap(float &a, float &b) { float c; c = a; a = b; b = c; } void main() { int a = 1, b = 2; swap(a, b); float a1 = 1,

C++ Primer 学习笔记_77_模板与泛型编程 --实例化

模板与泛型编程 --实例化 引言: 模板是一个蓝图,它本身不是类或函数.编译器使用模板产生指定的类或函数的特定版本号.产生模板的特定类型实例的过程称为实例化. 模板在使用时将进行实例化,类模板在引用实际模板类型时实例化,函数模板在调用它或用它对函数指针进行初始化或赋值时实例化. 1.类的实例化 当编写Queue<int>qi时,编译器自己主动创建名为Queue<int>的类.实际上,编译器通过又一次编写Queue模板,用类型int取代模板形參的每次出现而创建Queue<int

Swift语言中的泛型编程 【Generic】【Part 1】

泛型  泛型编程让你可以编写更具扩展性.易重用的功能,代码使用时的类型取决于你所定义的业务需求.你可以编写避免重复的代码,目标更加清晰明确,风格抽象. 泛型是Swift语言的一项强大的特性,基本上所有的swift标准库都建立在泛型代码上.实际上,你在这本书的时候不知不觉地接触到泛型,它贯穿始终.例如Swift的数组和字典类型都是泛型集合.你可以创建用于存放整数值的数组,也创建数组存储字符串,其他所有能在Swift中创建的类型都可以创建到数组中.类似的,你可以创建字典来存储数值或其他指定的类型,毫

c#2.0锐利体验《泛型编程》读书笔记

1.c#泛型及机制 ? 1 2 3 4 5 6 Class Stack<T> { } T 其实为type的缩小,不过也可为其他字符代替T ,被称为"泛型类型"  T为晚绑定的,在编译的时候还不能确定T的确切类型. 2.泛型类型 3. c#2.0锐利体验<泛型编程>读书笔记,布布扣,bubuko.com

C++ Primer 学习笔记_81_模板与泛型编程 --类模板成员[续1]

模板与泛型编程 --类模板成员[续1] 二.非类型形参的模板实参 template <int hi,int wid> class Screen { public: Screen():screen(hi * wid,'#'), cursor(hi * wid),height(hi),width(wid) {} //.. private: std::string screen; std::string::size_type cursor; std::string::size_type height

C++ Primer 学习笔记_82_模板与泛型编程 --类模板成员[续2]

模板与泛型编程 --类模板成员[续2] 六.完整的Queue类 Queue的完整定义: template <typename Type> class Queue; template <typename Type> ostream &operator<<(ostream &,const Queue<Type> &); template <typename Type> class QueueItem { friend clas