未使用的常量是否仍在编译或优化?如果没有,怎么办?

Gis*_*ofx 3 .net c# static compilation constants

我正在使用netMF编程嵌入式设备.记忆很珍贵.我正在访问低级MCU寄存器我想将所有这些寄存器保存在某种类型的静态类中,以便于访问.并非所有常量都在给定程序中使用.

是否编译了未使用的常量?

如果是这样,有没有更好的方式使它们不被编译并且程序大小更小,同时产生静态类的相同功能并获得intellisense是visual studio?

public static class DeviceRegisters
{
    public const uint Tim9 = 0x40014000;
    public const uint Tim8 = 0x40010400;
    public const uint GPIOA_MODER = 0x40020000;
}
Run Code Online (Sandbox Code Playgroud)

然后执行如下:

public class Thing
{
   public thing(uint timerRegister, uint GPIOx_register)
   {
       //do stuff
       Register thing = new Register(timerRegister);
       //...
   }

}
Run Code Online (Sandbox Code Playgroud)

实例化如下:

public class Program
{
   public static Thing MyThing;

   public static void Main()
   {
      MyThing = new Thing(DeviceRegisters.Tim9, DeviceRegisters.GPIOA_MODER);
      //rest of program below
   }

}
Run Code Online (Sandbox Code Playgroud)

Pat*_*man 5

我不确定你是否希望它们在编译中丢失.由于常量是public,它们可以在引用它的另一个程序集中使用.编译器不会优化它们.

我很确定如果它们已经存在internal且未使用,编译器会在发布模式下删除它们.

错了,看起来内部类中的私有常量在发布模式下没有优化,并且启用了优化代码选项...

即便如此,uint只需要32位.没那么担心.