C#常量的版本问题
作者:网络转载 发布时间:[ 2013/11/6 11:05:22 ] 推荐标签:
原因
利用ildasm.exe打开Study.exe,可以看到:
在这里,C#编译器已经将MaxIntSize常量编译到Main函数的代码之中,执行时,并不访问Lib.dll,即使将Lib.dll删除也不会影响执行的结果 。
因此,在无法确定常量是否会发生变化时,好不要使用常量 。而应该改用readonly变量。
示例:
Main函数代码:
using Lib;
internal class Program
{
private static void Main(string[] args)
{
Console.WriteLine(new ReadonlyValue().MaxIntSize);
}
}
Lib.dll中的代码:
using System;
namespace TestLibrary
{
public class ReadonlyValue
{
public readonly Int32 MaxIntSize = 32;
}
}
对Main与Lib都进行编译,利用ildasm.exe打开Study.exe可以看到:
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// Code size 18 (0x12)
.maxstack 8
IL_0000: nop
IL_0001: newobj instance void [TestLibrary]Lib.ReadonlyValue::.ctor()
IL_0006: ldfld int32 [TestLibrary]Lib.ReadonlyValue::MaxIntSize
IL_000b: call void [mscorlib]System.Console::WriteLine(int32)
IL_0010: nop
IL_0011: ret
} // end of method Program::Main
在这里,Main的每次执行都会调用 Lib.dll里的ReadonlyValue类,并创建一个实例对象。因此,重新编译之后的dll也能够得到Main函数的调用。只不过由于要创建新的对象,所以在性能上稍微差点,不过,如果不是大量创建,影响不大。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11