Как мне ссылаться на объект класса в другой функции? - PullRequest
1 голос
/ 23 апреля 2020

Я новичок в c#, я создаю программу викторины (я в самом начале), и я создал класс с вопросом, 4 ответами и правильным ответом. Я создал один вопрос в Publi c form1. Как правильно отобразить правильный ответ в окне сообщения при нажатии кнопки 1?

namespace Prog02
{

    public class Question
    {
        public string Que { get; }
        public string Ans1 { get; }
        public string Ans2 { get; }
        public string Ans3 { get; }
        public string Ans4 { get; }
        public string CorrectAns { get; set; }

        public Question(string que, String ans1, String ans2, String ans3, String ans4, String correctans)
        {
            Que = que;
            Ans1 = ans1;
            Ans2 = ans2;
            Ans3 = ans3;
            Ans4 = ans4;
            CorrectAns = correctans;
        }


    }
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            //define question1
            Question Question1 = new Question("What number is lowest", "1", "2", "3", "4", "1");

        }

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show(Question1.CorrectAns);

        }
    }
}


Ответы [ 2 ]

3 голосов
/ 23 апреля 2020

Вы создали экземпляр класса Question непосредственно в конструкторе формы (в пределах Form1, ниже вызова метода InitializeComponent). Указанная переменная Question1 действительна только в этой локальной области действия этой указанной c функции. Поэтому, если вы хотите получить доступ к ней извне этой функции, вы должны сделать ее доступной в классе. Это может быть достигнуто путем объявления поля внутри класса, например private Question question;, непосредственно перед вызовом конструктора и изменения вашего назначения на question = new Question(...);

public partial class Form1 : Form
{
    private Question question;

    public Form1()
    {
        InitializeComponent();

        this.question = new Question("What number is lowest", "1", "2", "3", "4", "1");
    }


    private void button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show(this.question.CorrectAns);
    }
}
1 голос
/ 23 апреля 2020

Вы должны удалить экземпляр question и сделать его полем.
Также были некоторые другие неправильные части кода. Вот полный код с исправлениями.
Добавлены комментарии для описания изменений.

using System;
using System.Collections.Generic;
namespace Prog02
{

    public class Question
    {
        // Added "private set" to the properties below 
        public string Que { get; private set;}
        public string Ans1 { get; private set;}
        public string Ans2 { get; private set;}
        public string Ans3 { get; private set;}
        public string Ans4 { get; private set;}
        public string CorrectAns { get; private set; }

        public Question(string que, String ans1, String ans2, String ans3, String ans4, String correctans)
        {
            Que = que;
            Ans1 = ans1;
            Ans2 = ans2;
            Ans3 = ans3;
            Ans4 = ans4;
            CorrectAns = correctans;
        }


    }
    public partial class Form1 : Form
    {
        // Created a private field for holding the question instance.
        private Question question1;
        public Form1()
        {
            InitializeComponent();
            //define question1
            question1 = new Question("What number is lowest", "1", "2", "3", "4", "1");

        }

        private void button1_Click(object sender, EventArgs e)
        {
            // Use the instance here ("question1" instead of "Question1")
            MessageBox.Show(question1.CorrectAns);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...