使用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();
}
}
错误:&#39;非静态字段,方法或属性需要对象引用myclass.mystruct.something&#39;
答案 0 :(得分:4)
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();
}
}
答案 1 :(得分:2)
struct definition和struct instance之间存在差异。您需要首先实例化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;
答案 2 :(得分:1)
您应该为mystruct
public void init()
{
mystruct m = new mystruct();
m.something = 20;
}
答案 3 :(得分:1)
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();
}
}
答案 4 :(得分:1)
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;
}
答案 5 :(得分:1)
我敢打赌,大多数(如果不是全部)都会指出你不仅会将Type与实例混淆,而且也不会以推荐的方式使用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而是类!