2017-03-12 3 views
0

"< -----"로 표시된 디버거에서 hoehe, laenge, breite, ekpreis 값 0을 제공합니다. Idk 왜, 나는 C#에서 새롭습니다. 나 pls 도와 드릴까요?Visual Studio C# .NET Get, Set right? 값 0

// 클래스 clsBerechnung :

public int Laenge { get; set; } 

    public int Breite { get; set; } 

    public int Hoehe { get; set; } 

    public double Ekpreis { get; set; } 

    public double Calculation() 
    { 
     double hilf = Oberflaeche(Laenge, Breite, Hoehe)/1.52; <--- 
     hilf = Math.Round(hilf * Ekpreis, 2); 
     return hilf; 
    } 

    public double Oberflaeche(int laenge, int breite, int hoehe) 
    { 
     double hilf = 0; 
     hilf = 2 * (laenge * hoehe) + 2 * (breite * hoehe) + (breite * laenge); 
     hilf = hilf/1000000; 
     hilf = Math.Round(hilf * 0.8, 2); 
     return hilf; 
    } 

// frmMain 수있는 :

frmErgebnis에서
static clsBerechnung Berechnung = new clsBerechnung(); 

    Berechnung.Ekpreis = Convert.ToDouble(reader["EK-Preis"]); 
    Berechnung.Laenge = Convert.ToInt32(reader["Länge"]); 
    Berechnung.Breite = Convert.ToInt32(reader["Breite"]); 
    Berechnung.Hoehe = Convert.ToInt32(reader["Höhe"]); 

    lblOberflaeche.Text = "Oberfläche: " + Convert.ToString(Berechnung.Oberflaeche(Berechnung.Laenge, Berechnung.Breite, Berechnung.Hoehe)) + " m²"; 

lblLaufmeter.Text = "Laufmeter: " + Convert.ToString(Math.Round((Berechnung.Oberflaeche(Berechnung.Laenge, Berechnung.Breite, Berechnung.Hoehe)/1.52),2)); 

// :

 static clsBerechnung Berechnung = new clsBerechnung(); 
     label1.Text = Convert.ToString(Berechnung.Calculation()); 

는 논리 맞습니까? Berechnung 회원 frmMainfrmErgebnis 정적이지만

답변

0

,이 두 개의 상이한 clsBerechnung 클래스의 인스턴스와 Laenge, BreiteHoehe 속성은 정적 아니다. 그러므로 frmMain에서 이러한 속성을 초기화해도 frmErgebnis의 속성에는 영향을주지 않습니다.

clsBerechnung의 인스턴스를 frmMainfrmErgebnis 사이에서 공유하거나 위에서 설명한 속성과 메서드를 정적으로 사용하도록 설정해야합니다.

+0

답변 해 주셔서 감사합니다. Dmitry. 다른 클래스를 괴롭히는 사이에 clsBerechnung의 단일 인스턴스를 공유하는 방법은 무엇입니까? 어떤 아이디어? –

+0

'clsBerechnung' 사용 패턴에 의존합니다. 모든 코드를 통해 하나의 인스턴스 만 필요하다면, 당신은 Singleton 패턴을 사용하고'clsBerechnung' 클래스에서 다음을 선언 할 수 있습니다 :'static clsBerechnung instance = null; public static clsBerechnung Instance {get {if (instance == null) 인스턴스 = 새 clsBerechnung; 인스턴스 반환}}'. 이것은 효과적으로 속성과 메서드가 정적 인 경우와 동일한 기능을 효과적으로 제공합니다. –

+0

클래스에 인스턴스가 여러 개 있어야하는 경우 한 폼 클래스에서 초기화 된 Berechnung 변수를 다른 폼 클래스로 전달하면됩니다. –