C#如何访问公共结构的静态字段

本文关键字:结构 静态 字段 何访问 访问 | 更新日期: 2023-09-27 18:21:14

我正在尝试访问已定义为公共的structstatic字段。然而,我仍然"由于其保护级别而无法访问"。有人能帮我吗?

public class Program
{
    public struct AT_CMD
    {
        static int x = 7;
       static  byte[] cmd_mode = new byte[3] { 0x2B, 0x2B, 0x2B };
       static  byte[] end_device_assoc = new byte[4] { 0x41, 0x54, 0x41, 0x31 };
      //should be 0 for end device, default is 0
       static  byte[] data_rate = new byte[4] { 0x41, 0x54, 0x42, 0x44 }; //3 for 9600, 5 for 38400
       static  byte[] channel = new byte[4] { 0x41, 0x54, 0x43, 0x48 }; //0x0B-0x1A
       static  byte[] Dest_addr_high = new byte[4] { 0x41, 0x54, 0x44, 0x48 }; //0 FOR 16bit
       static  byte[] Dest_addr_low = new byte[4] { 0x41, 0x54, 0x44, 0x4C };
       static  byte[] my_addr = new byte[4] { 0x41, 0x54, 0x4D, 0x59 }; // 0-0xFFFF
       static  byte[] carriage_return = new byte[1] { 0x0D };
   }  
    static void Main()
    {
        int y = AT_CMD.x;
    }
}

C#如何访问公共结构的静态字段

将其更改为:

  public struct AT_CMD
  {
        public static int x = 7;
        // ...
  }  

仅制作struct public不会影响其成员,除非您另有指定,否则默认情况下struct的成员将为private

UPDATE:为了解决默认访问的混乱,如果在命名空间级别声明(不嵌套在另一个类/结构中),internalstructclass本身的默认访问:

在命名空间中直接声明的类和结构换句话说,没有嵌套在其他类或结构中)无论是公开的还是内部的。如果没有访问权限,则默认为内部指定了修饰符。

然而,classstruct中的字段始终默认为private:

类成员和结构成员的访问级别,包括嵌套类和结构,默认情况下是私有的。

来自MSDN。

默认情况下,字段为私有。添加最具限制性的修改器,该修改器仍将允许您使用该结构。

public struct AT_CMD
{
    public static int x = 7;
}  
static void Main()
{
    int y = AT_CMD.x;
}

结构是公共的,但成员不是。

这样声明它们:

public static  byte[] cmd_mode = new byte[3] { 0x2B, 0x2B, 0x2B };

然而,看起来你的意思是这些都是常数。在这种情况下,它们真的应该这样声明:

public static readonly IEnumerable<byte> cmd_mod = new byte[3] { 0x2B, 0x2B, 0x2B };