在类中定义结构时,如何初始化结构成员

本文关键字:结构 初始化 成员 定义 | 更新日期: 2023-09-27 18:28:21

使用c#,我想从类中设置作为类成员的结构中的变量。对c#来说还很新鲜。感谢您的帮助。

class myclass
{
   public struct mystruct
   {
       public int something;
   }
   public void init() 
   {
      mystruct.something = 20; // <-- this is an error
   }
   static void Main(string[] args)
   {
       myclass c = new myclass();
       c.init();          
   }
}

错误:"非静态字段、方法或属性myclass.mystruct.something需要对象引用"

在类中定义结构时,如何初始化结构成员

mystruct是类中的一个类型,但您没有任何具有该类型的字段:

class myclass
{
   public struct mystruct
   {
       public int something;
   }
   private mystruct field;
   public void init() 
   {
      field.something = 20; // <-- this is no longer an error :)
   }
   static void Main(string[] args)
   {
       myclass c = new myclass();
       c.init();          
   }
}

结构定义和结构实例之间有区别。您需要首先实例化mystruct,然后可以为其赋值——或者将其声明为静态字段。

public struct mystruct
{
  public int something;
}
var foo = new mystruct();
foo.something = 20;

public struct mystruct
{
  public static int something;
}
mystruct.something = 20;

您应该为mystruct 创建一个对象

public void init() 
{
  mystruct m = new mystruct();
  m.something = 20; 
}
public struct mystruct
{
   public int something;
}

这只是一个定义。正如错误状态所示,必须有一个初始化的对象才能使用实例变量。

class myclass
{
   public struct mystruct
   {
       public int something;
   }
   public void init() 
   {
      mystruct haha = new mystruct();
      haha.something = 20; // <-- modify the variable of the specific instance
   }
   static void Main(string[] args)
   {
       myclass c = new myclass();
       c.init();          
   }
}
class myclass
{
  mystruct m_mystruct;
   public void init() 
   {
      m_mystruct.something = 20; 
   }
   static void Main(string[] args)
   {
       myclass c = new myclass();
       c.init();          
   }
}
 public struct mystruct
   {
       public int something;
   }

哇,太神奇了!

我敢打赌,如果不是全部的话,大多数人都会指出,你不仅混淆了Type和Instance,而且没有以推荐的方式使用Struct。。

您应该只将结构用作免疫表,这意味着您应该使所有成员成为readonly,并只在构造函数中设置它们!

class myclass
{
  mystruct oneMyStruct;
  public struct mystruct
  {
    public readonly int something;
    public mystruct(int something_) { something = something_; }
  }
  public void init()
  {
    oneMyStruct = new mystruct(20);
  }
  static void Main(string[] args)
  {
    myclass c = new myclass();
    c.init();
  }
}

如果您需要对成员进行读写访问,则不应使用struct,而应使用class!