关于.NET 中间语言问题,高手请不要错过 ,比较长,需要细心才能看完
主: 本文的代码内码 地址在:http://blog.vckbase.com/zhaotide/archive/2004/11/06/1316.aspx
我在学习这篇文章的时候遇到了一个不解的地方,请高手帮忙,谢谢.
代码如下时:
namespace ConsoleApplication1
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
//
MyDerived mD = new MyDerived();
MyBase mB = (MyBase) mD;
// MyBase mB = new MyBase();
System.Console.WriteLine(mD.Meth1());
System.Console.WriteLine(mD.Meth2());
System.Console.WriteLine(mD.Meth3());
System.Console.WriteLine( "以上为类MyDerived的显示结果!\n ");
System.Console.WriteLine(mB.Meth1());
System.Console.WriteLine(mB.Meth2());
System.Console.WriteLine(mB.Meth3());
System.Console.WriteLine( "以上为MyBase的显示结果!\n ");
System.Console.WriteLine( "按任意键退出... ");
System.Console.ReadLine();
}
}
public class MyBase
{
public virtual string Meth1()
{
return "MyBase-Meth1 ";
}
public virtual string Meth2()
{
return "MyBase-Meth2 ";
}
public virtual string Meth3()
{
return "MyBase-Meth3 ";
}
}
class MyDerived : MyBase
{
// 使用 override 关键字重写虚方法 Meth1:
public override string Meth1()
{
return "MyDerived-Meth1 ";
}
// 使用 new 关键字显式隐藏
// 虚方法 Meth2:
public new string Meth2()
{
return "MyDerived-Meth2 ";
}
// 由于下面声明中没有指定任何关键字
// 因此将发出一个警告来提醒程序员
// 此方法隐藏了继承的成员 MyBase.Meth3():
public string Meth3()
{
return "MyDerived-Meth3 ";
}
}
}
main中间语言为:
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
.custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 )
// Code size 111 (0x6f)
.maxstack 1
.locals init ([0] class ConsoleApplication1.MyDerived mD,
[1] class ConsoleApplication1.MyBase mB)
IL_0000: newobj instance void ConsoleApplication1.MyDerived::.ctor()