带参数的C#构造函数 - 传递

时间:2015-01-13 16:30:36

标签: c# constructor parameter-passing

我有一个关于我的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();
    }

这对我来说真的很令人沮丧。我试着查看网络和书籍,但是对于构造函数应该给出哪些参数的所有解释我都不清楚。有人可以解释一下吗?不理解它会让我疯狂。另外,我经常被困在这些地方..

2 个答案:

答案 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的行可以随时间推移。即在构造函数中构造的实例,但仅当按钮单击显示表单时才使用该值。