- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C# 泛型编程
泛型:通过参数化类型来实现在同一份代码上操作多种数据类型。利用“参数化类型”将
类型抽象化,从而实现灵活的复用。
例子代码:
class Program
{
staticvoid Main( string [] args)
{
int obj = 2;
Test int test = newTest int (obj);
Console .WriteLine( int: + test.obj);
string obj2 = hello world ;
Test string test1 = newTest string (obj2);
Console .WriteLine( String: + test1.obj);
Console .Read();
}
}
class Test T
{
public T obj;
public Test(T obj)
{
this .obj = obj;
}
}
输出结果是:
int:2
String:hello world
程序分析:
1、Test 是一个泛型类。 T 是要实例化的范型类型。 如果 T 被实例化为 int 型,那么成员变量
obj 就是 int 型的,如果 T 被实例化为 string 型,那么 obj 就是 string 类型的。
2 、根据不同的类型,上面的程序显示出不同的值。
C#泛型机制:
C#泛型能力有 CLR在运行时支持: C#泛型代码在编译为 IL 代码和元数据时,采用特殊的占位
符来表示范型类型,并用专有的 IL 指令支持泛型操作。而真正的泛型实例化工作以“ on-dem
and ”的方式,发生在 JIT 编译时。
看看刚才的代码中 Main 函数的元数据
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// Code size 79 (0x4f)
.maxstack 2
.locals init ([0] int32 obj,
[1] class CSharpStudy1.Test`1int32 test,
[2] string obj2,
[3] class CSharpStudy1.Test`1string test1)
IL_0000: nop
IL_0001: ldc.i4.2
IL_0002: stloc.0
IL_0003: ldloc.0
IL_0004: newobj instance void class CSharpStudy1.Test`1int32::.ctor(!0)
IL_0009: stloc.1
IL_000a: ldstr int:
IL_000f: ldloc.1
IL_0010: ldfld !0 class CSharpStudy1.Test`1int32::obj
IL_0015: box [mscorlib]System.Int32
IL_001a: call string [mscorlib]System.String::Concat(object,
object)
IL_001f: call void [mscorlib]System.Console::WriteLine(string)
IL_0024: nop
IL_0025: ldstr hello world
IL_002a: stloc.2
IL_002b: ldloc.2
IL_002c:
文档评论(0)