我的Struct有问题:),编译器给我错误
“非静态字段,方法或者需要对象引用 物业'SonyasProgram.Form1.frameLimits.Max.Y.get'“
我一直在寻找一个解决方案,但没有一个特别清楚。这是我的代码:
public partial class Form1 : Form
{
public struct frameLimits
{
public struct Max
{
private int yval = 220;
public int Y
{
get
{
return yval;
}
set
{
yval = value;
}
}
}
}
public Form1()
{
frameLimits.Max.Y = 1;
最后一行是识别错误的位置。任何帮助都会很棒,谢谢!
答案 0 :(得分:2)
正如编译器告诉您的那样,您正在尝试执行需要静态变量的操作。您要么想要创建frameLimits的实例,要么更有可能将yval
声明为static
。
答案 1 :(得分:1)
frameLimits
和Max
是类型而不是struct
实例 - 您只能设置实例的实例属性。除此之外,你真的不应该使用可变的,嵌套的结构 - 请重新考虑。
答案 2 :(得分:1)
(其次是黑客解决方案,然后是简化解决方案)
目前,您声明了两种数据类型,一种是嵌套的,因此您可以使用每种数据类型声明变量:
frameLimits.Max highest = new frameLimits.Max();
highest.Y = 5;
智能感知显示:highest.
frameLimits limits = new frameLimits();
// no members exist on the frameLimits type, so nothing to access.
智能感知显示:limits.
IntelliSense可以帮助解决它。
嵌套结构不能以您最初尝试的方式使用,因为正如其他人已在我之前指出的那样,您尝试使用类型而不是这些类型的实例。
如果我将一个名为MaxValue的实例字段添加到Max结构中,那么我可能会接近您的意图。这将使调用者代码成为:
frameLimits limits = new frameLimits();
limits.MaxValue.Y = 5;
然而,这是一个非常令人费解的方式,而不是推荐。
修改过的结构就是这样:
public struct frameLimits
{
public struct Max
{
private int yval;
public int Y
{
get
{
return yval;
}
set
{
yval = value;
}
}
}
public Max MaxValue;
}
你可以删除内部结构只是简单的事情,但你仍然对结构有一些限制,这就是我实现默认值220的原因。
新的来电者代码是:
FrameLimits limits = new FrameLimits();
Console.Write( limits.MaxY ); // prints 220
limits.MaxY = 5;
这个结构被简化到一定程度(删除了嵌套结构):
public struct FrameLimits
{
private int? yval;
public int MaxY
{
get
{
return yval.HasValue ? yval.Value : 220;
}
set
{
yval = value;
}
}
}
答案 3 :(得分:0)
frameLimits是一个struct(思考类型),因此您需要先创建一个实例才能进行赋值,或者使该字段的路径只包含静态成员。