在类中定义结构时,如何初始化结构成员
本文关键字:结构 初始化 成员 定义 | 更新日期: 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!