使用泛型 C#
using System; using System.Collections.Generic; using System.Text; namespace Ttype { class Program { static void Main(string[] args) { Stack<int> s = new Stack<int>(); s.setO_item(2); Console.WriteLine(s.getO_item()); } } class Stack<T> { private T i_item; public void setO_item(T o) { i_item = o; } public T getO_item() { return i_item; } } }
IL
.method private hidebysig static void Main(string[] args) cil managed { .entrypoint // Code size 28 (0x1c) .maxstack 2 .locals init ([0] class Ttype.Stack`1<int32> s) IL_0000: nop IL_0001: newobj instance void class Ttype.Stack`1<int32>::.ctor() IL_0006: stloc.0 IL_0007: ldloc.0 IL_0008: ldc.i4.2 IL_0009: callvirt instance void class Ttype.Stack`1<int32>::setO_item(!0) IL_000e: nop IL_000f: ldloc.0 IL_0010: callvirt instance !0 class Ttype.Stack`1<int32>::getO_item() IL_0015: call void [mscorlib]System.Console::WriteLine(int32) IL_001a: nop IL_001b: ret } // end of method Program::Main
.method public hidebysig instance !T getO_item() cil managed { // Code size 12 (0xc) .maxstack 1 .locals init ([0] !T CS$1$0000) IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld !0 class Ttype.Stack`1<!T>::i_item IL_0007: stloc.0 IL_0008: br.s IL_000a IL_000a: ldloc.0 IL_000b: ret } // end of method Stack`1::getO_item
.method public hidebysig instance void setO_item(!T o) cil managed { // Code size 9 (0x9) .maxstack 8 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 IL_0003: stfld !0 class Ttype.Stack`1<!T>::i_item IL_0008: ret } // end of method Stack`1::setO_item
不使用泛型 C#
using System; using System.Collections.Generic; using System.Text; namespace Ttype { class Program { static void Main(string[] args) { Stack s = new Stack(); s.setO_item(2); Console.WriteLine(s.getO_item()); } } class Stack { private int i_item; public void setO_item(int o) { i_item = o; } public int getO_item() { return i_item; } } }
IL
.method private hidebysig static void Main(string[] args) cil managed { .entrypoint // Code size 28 (0x1c) .maxstack 2 .locals init ([0] class Ttype.Stack s) IL_0000: nop IL_0001: newobj instance void Ttype.Stack::.ctor() IL_0006: stloc.0 IL_0007: ldloc.0 IL_0008: ldc.i4.2 IL_0009: callvirt instance void Ttype.Stack::setO_item(int32) IL_000e: nop IL_000f: ldloc.0 IL_0010: callvirt instance int32 Ttype.Stack::getO_item() IL_0015: call void [mscorlib]System.Console::WriteLine(int32) IL_001a: nop IL_001b: ret } // end of method Program::Main .method public hidebysig instance int32 getO_item() cil managed { // Code size 12 (0xc) .maxstack 1 .locals init ([0] int32 CS$1$0000) IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld int32 Ttype.Stack::i_item IL_0007: stloc.0 IL_0008: br.s IL_000a IL_000a: ldloc.0 IL_000b: ret } // end of method Stack::getO_item .method public hidebysig instance void setO_item(int32 o) cil managed { // Code size 9 (0x9) .maxstack 8 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 IL_0003: stfld int32 Ttype.Stack::i_item IL_0008: ret } // end of method Stack::setO_item
使用多态 C#
using System; using System.Collections.Generic; using System.Text; namespace Ttype { class Program { static void Main(string[] args) { Stack s = new Stack(); s.setO_item(2); Console.WriteLine((int)s.getO_item()); } } class Stack { private object i_item; public void setO_item(object o) { i_item = o; } public object getO_item() { return i_item; } } }
IL
.method private hidebysig static void Main(string[] args) cil managed { .entrypoint // Code size 38 (0x26) .maxstack 2 .locals init ([0] class Ttype.Stack s) IL_0000: nop IL_0001: newobj instance void Ttype.Stack::.ctor() IL_0006: stloc.0 IL_0007: ldloc.0 IL_0008: ldc.i4.2 IL_0009: box [mscorlib]System.Int32 IL_000e: callvirt instance void Ttype.Stack::setO_item(object) IL_0013: nop IL_0014: ldloc.0 IL_0015: callvirt instance object Ttype.Stack::getO_item() IL_001a: unbox.any [mscorlib]System.Int32 IL_001f: call void [mscorlib]System.Console::WriteLine(int32) IL_0024: nop IL_0025: ret } // end of method Program::Main .method public hidebysig instance object getO_item() cil managed { // Code size 12 (0xc) .maxstack 1 .locals init ([0] object CS$1$0000) IL_0000: nop IL_0001: ldarg.0 IL_0002: ldfld object Ttype.Stack::i_item IL_0007: stloc.0 IL_0008: br.s IL_000a IL_000a: ldloc.0 IL_000b: ret } // end of method Stack::getO_item .method public hidebysig instance void setO_item(object o) cil managed { // Code size 9 (0x9) .maxstack 8 IL_0000: nop IL_0001: ldarg.0 IL_0002: ldarg.1 IL_0003: stfld object Ttype.Stack::i_item IL_0008: ret } // end of method Stack::setO_item