2013-06-03 163 views
1

我是一個新手程序員。我有一個名爲GravCalc的類繼承自我的表單類Main。裏面有很多處理不同控制的方法。這是一個代碼示例。我應該在哪裏/如何創建我的課程實例?

public class GravCalc : Main 
    { 
     private static float engineer = 1.0f; 

     public void ShowEngineer() 
     { 
      GravCalc.engineer = 1.1f; 
      gravEngineerLabel.Visible = true; 
      gravEngineerLine.Visible = true; 
     } 
    }; 

我會做這些方法和類的靜態,但隨後我就無法從Form繼承或因爲他們都是非靜態的控制操作。

在這種情況下,我必須創建我的類的一個實例。所以我在Main班寫了GravCalc myGravCalc = new GravCalc();

一切都在編譯,但是當我啓動程序時,會創建我的類的多個實例,直到達到堆棧幀的最大數量,因此發生System.StackOverflowException

我在做什麼錯?

編輯

我想做的事情是組中的所有方法和變量concernig一個面板爲一類。如果它可能是靜態的,那將是完美的。我已經從Main繼承了我的控制權,但是你意識到我不是我想要的。

那麼有沒有可能讓一個可以在控件上操作的類?或者我應該把一些東西扔進那個Form類?

+1

爲什麼您的GravCalc類繼承自Main?你知道這使GravCalc成爲一種形式嗎? – Blorgbeard

+2

因此,'GravCalc'繼承自'Main'並且'Main'實例化一個新的'GravCalc'? – 2013-06-03 22:16:13

+0

b [e]沉思無言...... –

回答

2

而是從主要繼承有訪問控制的,你應該通過您需要在GravCalc的構造函數中使用該類對控件的引用。

public class GravCalc 
{ 
    private ControlType _control1; 
    private ControlType _control2; 

    public GravCalc(ControlType control1, ControlType control2) 
    { 
     _control1 = control1; 
     _control2 = control2 
    } 

    private static float engineer = 1.0f; 

    public void ShowEngineer() 
    { 
     GravCalc.engineer = 1.1f; 
     gravEngineerLabel.Visible = true; 
     gravEngineerLine.Visible = true; 
    } 
}; 
5

GravCalc IS Main ...所以如果在Main中創建GravCalc,那麼您將再次創建一個Main,然後再次創建一個Main,然後最終用完堆棧。

你想要做的是找到原來的主要創建,其中與GravCalc替換,並採取了new GravCalc出你的主要

+0

這取決於他在哪裏寫新的聲明不是嗎? –

+2

它會,但通過例外的性質,它很容易猜到:) –

相關問題