2015-01-13 65 views
0

我收到了關於Windows窗體應用程序的構造函數的問題。首先我想說我是編程新手。帶參數的C#構造函數 - 傳遞

事情是這樣的。我在另一個應該保存不同參數值的類中構造一個構造函數。在這種情況下,它應該是int X,int Y,int Length,int Height。我想在這裏做的是讓我的picturebox的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

那麼你的其他班級是否能夠傳遞數據呢?要麼它可以,而且你需要輸入值,或者不能,並且該類不能在其構造函數中使用參數。 – Servy

+2

你不知道值,因爲它們來自窗體(或其他來源)?然後在知道值之前不要調用構造函數。 –

+0

當你知道正確的值時,你總是可以創建一個字段並在以後調用構造函數:'Rechthoekcs Rechthoek;'和後面的'Rechthoek = new Rechthoekcs(...)'。 –

回答

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); 
} 

你做任何事情「隨機」關於他們之前,你分配參數的值,以你的私有數據成員。您只需更改構造函數中的參數值而不分配它們。 SWAP在你做他們的順序。

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; 
} 

現在你已經成功地隨機你的價值觀將被設置爲您的數據成員變量基於假設,那些你擺在那裏實際上是可變的存在,他們應該這麼做。更好/更模塊化的代碼會在你創建對象的地方進行隨機化。

例:Object foo = new Object(new Random, new Random, new Random, new Random)

0

沒有答案OP正在尋找,但是這是你如何解決「我還不知道的價值,但我需要構造對象反正」問題的版本。

可以延遲通過傳遞Func<T>每個參數,而不是僅僅T假設值實際上將可通過他們所需要的時間請求數據:使用UseDelayedValues可以隨時間分佈

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)); 

線。即實例在構造函數中構造,但僅當通過按鈕單擊來顯示錶單時才使用該值。