2015-01-13 3 views
0

내 Windows Forms 응용 프로그램의 생성자에 대한 질문이 있습니다. 우선 나는 프로그래밍에 익숙하지 않다고 말하고 싶다.매개 변수가있는 C 생성자 - 성공

것은 이쪽. 다른 매개 변수 값을 보유해야하는 다른 클래스의 생성자를 만들고 있습니다. 이 경우 int X, int Y, int Length, int Height 여야합니다. 내가 여기서하고 싶은 것은 X, Y, 길이와 높이를 모두 내 그림 상자에 임의로 만드는 것입니다. 나는이 수업/생성자

를 호출 할 내를 Form1에서

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

그러나 그것은 나에게 오류를 제공합니다 : 나는 아래로 아래 코드를 보냅니다. 그것은 "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); 
} 

매개 변수의 값을 "임의 화"하기 전에 개인 데이터 멤버에게 매개 변수의 값을 할당합니다. 생성자의 매개 변수 값을 할당하지 않고 단순히 변경하는 것입니다. 당신이 그들이 할 순서를 교체합니다.

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

하지 응답 영업 이익이 찾고있는 사람이되어 있지만 해결 "나는 아직 값을 모르지만 어쨌든 개체를 생성 할 필요가"질문의 버전을 어떻게입니다.

각 매개 변수에 대한 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)); 

라인. 나는. 생성자에서 생성 된 인스턴스이지만 버튼 클릭으로 양식이 표시 될 때만 사용되는 값입니다.

관련 문제