C# 在类中定义结构时,如何初始化结构成员?
使用c#我想在一个类的成员结构中,从该类中设置变量。对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)
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();
}
}