0

初期化された通常のクラス以外は何も見えません。

クラス Bet.cs は次のとおりです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Lab_ADayAtTheRaces
{
public class Bet : Form1
{
    public int Bets_Joe;
    public int Bets_Bob;
    public int Bets_Al;
    public int Dog_Joe;
    public int Dog_Bob;
    public int Dog_Al;

    public int Amount;
    public int Dog;
    public Guy Bettor;

    public string GetDescription()
    {
        Amount = (int)numericUpDownBucksToBet.Value;
        Dog = (int)numericUpDownDogToBetOn.Value;
        //Bettor =
        return Bettor + " placed a bet in the amount of " + Amount + " bucks on dog number " + Dog;
    }

    public int PayOut(int Winner)
    {
        return Winner;
    }

    public void MakeBets()
    {
        if (joeRadioButton.Checked == true)
        {
            Bets_Joe = (int)numericUpDownBucksToBet.Value;
            Dog_Joe = (int)numericUpDownDogToBetOn.Value;
        }

        else if (bobRadioButton.Checked == true)
        {
            Bets_Bob = (int)numericUpDownBucksToBet.Value;
            Dog_Bob = (int)numericUpDownDogToBetOn.Value;
        }

        else if (alRadioButton.Checked == true)
        {
            Bets_Al = (int)numericUpDownBucksToBet.Value;
            Dog_Al = (int)numericUpDownDogToBetOn.Value;
        }
    }

}

}

例外をスローするコードは次のとおりです。

namespace Lab_ADayAtTheRaces
{
public partial class Form1 : Form
{
    Bet bets = new Bet(); //**THIS LINE THROWS THE STACKOVERFLOW EXCEPTION**

    Greyhound[] dogs = new Greyhound[3];

もっと何か言いたいことがありますが、これ以上追加することはないので、こことここにいくつかの行を追加します。もっと何か言いたいことがありますが、これ以上追加することはないので、こことここにいくつかの行を追加します。もっと何か言いたいことがありますが、これ以上追加することはないので、こことここにいくつかの行を追加します。もっと何か言いたいことがありますが、これ以上追加することはないので、こことここにいくつかの行を追加します。どんな助けでも大歓迎です...事前に感謝します

4

1 に答える 1

11

あなたBetは から継承してForm1いるので、Bet()を呼び出しForm1()、その内部でForm1()再び呼び出しますBet()-> 何度も ->StackOverflow

ヒント: クラスのコンストラクターまたはそのクラス定義で、次のようにクラスのコンストラクターを呼び出すべきではありません。

public class Form1 : Form {
    public Form1(){
    }
    public Form1(string s){
    }
    public Form1 f = new Form1();//this will throw StackOverflowException
    public Form1 f = new Form1("");//this will also throw StackOverflowException       
    //Form2 inherits from Form1
    public Form2 f = new Form2(); //this will throw StackOverflowException
}
//or
public class Form1 : Form {
    public Form1(){
        Form1 f = new Form1();//This will throw stackoverflowexception
        Form1 f = new Form1("");//This won't throw any exception
    }
    public Form1(string s){
    }
}

クラスが初期化されると、コンストラクターを呼び出す前にすべてのメンバーが最初にBet bets = new Bet();初期化されるため、 Form1. だからあなたはそれを避ける必要があります。. new Bet()_ Load_

Bet bets;//Just declare it without initializing it
private void Form1_Load(object sender, EventArgs e){
   bets = new Bet();
}
于 2013-09-02T11:11:02.453 に答える