Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在类中定义结构时,如何初始化结构成员?_C# - Fatal编程技术网

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

C# 在类中定义结构时,如何初始化结构成员?,c#,C#,使用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)

使用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();          
   }
}
class-myclass
{
公共结构mystruct
{
公共信息;
}
公共void init()
{

mystruct.something=20;//您应该为
mystruct

public void init() 
{
  mystruct m = new mystruct();
  m.something = 20; 
}
这只是一个定义。正如错误所述,您必须有一个已初始化的对象才能使用实例变量

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
{
公共信息;
}
公共void init()
{
mystruct haha=新mystruct();

haha.something=20;//
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();          
   }
}
class-myclass
{
公共结构mystruct
{
公共信息;
}
私有mystruct字段;
公共void init()
{

field.something=20;//结构定义和结构实例之间存在差异。您需要首先实例化mystruct,然后可以为其赋值-要么将mystruct something声明为静态字段

public struct mystruct
{
  public int something;
}

var foo = new mystruct();
foo.something = 20;

哇,太棒了

我敢打赌,大多数(如果不是全部的话)都会指出,您不仅混淆了类型和实例,而且没有按照推荐的方式使用Struct

您应该仅将结构用作不可变的,这意味着您应该将所有成员设置为只读,并仅在构造函数中设置它们

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!

您确定这都是代码吗?这将导致编译器错误,没有运行时错误。如果您有一个字段
mystruct mystruct
,则不会发生此错误,因为它将被初始化。请显示实际代码。
mystruct
是一个类型,而不是一个字段你已经定义了一个结构,但不是该结构的一个实例。哇,这太神奇了!我敢打赌,大多数(如果不是全部的话)都会指出,你不仅混淆了类型和实例,而且没有按照推荐的方式使用结构。你应该只将结构作为不可变的,这意味着你应该使所有成员都是只读的,并且只需在构造函数中设置它们!如果需要对成员进行读写访问,就不应该使用Stutt而是Cype!考虑添加更多的单词(下投票不是我BTW),从我看到的,有人给了你“-1”,然后在你的编辑之后,有人(显然是另一个人)给了你一个“+ 1”。。除了给你一张便条之外,我什么也没做。。对不起,我不知道更多,但谢谢你在回答中的解释!:)谢谢。我也这么想了,但我不确定如何从类的构造函数中初始化结构。谢谢。决定只包含相关的代码部分,以便于阅读。谢谢你的深入分析.将struct定义为只读构造的原因是什么?这方面有很多资料。开始阅读吧!
public struct mystruct
{
  public int something;
}

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

mystruct.something = 20;
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();
  }

}