2016-04-22 3 views
2

私はコーディングスタイルを手続き型プログラミングスタイルのほうに移して適応させようとしてきましたが、システムレジストリで作業するクラスです。さらに、コードはメインクラスで正常に動作します。 P.S私はスクリプトの背景を形成する。フォームクラス、シンプルなコードテストで "System.StackOverflowException"を取得し続ける

コードエラー:型「System.StackOverflowException」の未処理の例外は、私はそれが簡単に問題を見つけるために作るためにメインのアプリケーションからのコードを削減しているのSystem.Windows.Forms.dll

で発生しました。

メインフォームクラス:

public partial class Form1test : Form 
{ 
    // An unhandled exception of type 'System.StackOverflowException' 
    // occurred in System.Windows.Forms.dll 
    public Form1test() 
    { 
     TestClass lsr = new TestClass(); 
     lsr.chkRegAct(); 
     InitializeComponent(); 
    } 
} 

TestClassを:

class TestClass : Form1test 
{ 
    //rest of code 
} 
+1

TestClassがForm1testから継承する理由は明確ではありません。それはおそらくそれ自身の上に立つことができます。 – LarsTech

+1

'TestClass'は' Form1test'から継承してはいけません。あなたはctorで 'TestClass lsr = new TestClass();'を使って無限回帰を得ます。 –

答えて

5

TestClassは、Form1Testに由来します。

あなたがのコンストラクタを呼び出すになり、新たなTestClassを生成し、基本クラス(Form1Test)のコンストラクタを呼び出すことになり、新たなTestClassを生成し、基本クラス(Form1Test)のコンストラクタを呼び出すことになり、新たなTestClassを作成新しいTestClassを生成する基底クラス(Form1Test)。基底クラス(Form1Test)のコンストラクタを呼び出して新しいTestClassを生成し、基底クラスのコンストラクタ(Form1Test)を呼び出して、新しいコンストラクタを呼び出す結果となるTestClassを生成します。ベースクラス(Form1Test)の新しいTestClassを生成します。新しいTestClassを生成する基底クラス(Form1Test)のコンストラクタを呼び出して、基底クラス(Form1Test)のコンストラクタを呼び出して新しいTestClassを生成し、その結果新しい基底クラス(Form1Test)のコンストラクタを呼び出して結果がTestClass ...

StackOverflowException無限再帰による関数呼び出しが多いために発生します。

+1

非常に興味深い、情報をありがとう。 – Mattlinux1

3

により継承チェーンへTestClassを: Form1test。 TestClassコンストラクターを呼び出すと、無限再帰が作成されます。

関連する問題