[英]How to initialize struct members, when struct is defined within a class?
使用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,然后可以为其分配值-要么为其赋值,要么将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!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.