我有一个关于我的Windows窗体应用程序的构造函数的问题。首先,我想说我是编程新手。
事情就是这样。我在另一个应该保存不同参数值的类中创建一个构造函数。在这种情况下,它应该是int X,int Y,int Length,int Height。我想要做的是让我的图片框中的X,Y,长度和高度都是随机的。我在下面发送代码:
class Rechthoekcs
{
Random random = new Random();
public int Xas
{
get;
set;
}
public int Yas
{
get;
set;
}
public int Lengte
{
get;
set;
}
public int Breedte
{
get;
set;
}
public Rechthoekcs(int x, int y, int lengte, int breedte)
{
this.Xas = x;
this.Yas = y;
this.Lengte = lengte;
this.Breedte = breedte;
x = random.Next(x);
y = random.Next(y);
lengte = random.Next(lengte);
breedte = random.Next(breedte);
}
从我的Form1我想调用这个类/构造函数
但它给了我一个错误。它说"不包含带0参数的构造函数"我知道因为我键入了x,y,长度和宽度。但我无法将其他类中的变量添加到新参数中。我真的不明白。我发现施工人员非常努力。我永远不知道我应该给它什么参数...
我从Form1下面发送代码:
public partial class Form1 : Form
{
Rechthoekcs Rechthoek = new Rechthoekcs(.......);
public Form1()
{
InitializeComponent();
}
这对我来说真的很令人沮丧。我试着查看网络和书籍,但是对于构造函数应该给出哪些参数的所有解释我都不清楚。有人可以解释一下吗?不理解它会让我疯狂。另外,我经常被困在这些地方..
答案 0 :(得分:1)
public Rechthoekcs(int x, int y, int lengte, int breedte)
{
this.Xas = x;
this.Yas = y;
this.Lengte = lengte;
this.Breedte = breedte;
x = random.Next(x);
y = random.Next(y);
lengte = random.Next(lengte);
breedte = random.Next(breedte);
}
在执行任何操作之前,您要将参数值分配给私人数据成员"随机化"关于他们。您只需更改构造函数中的参数值而不指定它们。交换您执行的订单。
public Rechthoekcs(int x, int y, int lengte, int breedte)
{
x = random.Next(x);
y = random.Next(y);
lengte = random.Next(lengte);
breedte = random.Next(breedte);
this.Xas = x;
this.Yas = y;
this.Lengte = lengte;
this.Breedte = breedte;
}
现在,您已成功将您的值随机化,这些值将设置为您的数据成员变量 ASSUMING ,您放在那里的那些变量实际存在,它们应该存在。更好/更模块化的代码可以在您创建对象时进行随机化。
例如:Object foo = new Object(new Random, new Random, new Random, new Random)
答案 1 :(得分:0)
不是OP正在寻找的答案,但这就是你如何解决“我还不知道价值,但我还需要构建对象”这个问题的版本。
您可以通过为每个参数传递Func<T>
而不仅仅是T
来延迟请求数据,假设这些值在他们需要的时候实际可用:
class UseDelayedValues
{
Func<int> x;
public UseDelayedValues(Func<int> x)
{
this.x = x;
}
public UseWithX(int other)
{
return other + x();
}
}
int value = 0;
var r = new UseDelayedValues(() => value);
value = 42;// get some value
Console.WriteLine(r.UseDelayedValues(1));
var delayedFromTextbox = new UseDelayedValues(() => int.Parse(textBox1.Value));
使用UseDelayedValues
的行可以随时间推移。即在构造函数中构造的实例,但仅当按钮单击显示表单时才使用该值。