Еще одной альтернативой может быть какой-то фабричный метод:
MyForm.cs
public class MyForm
{
Random rand = new Random();
// Constructor
public MainPage()
{
InitializeComponent();
AnswerValue.Visibility = Visibility.Collapsed;
Load();
}
private void Load()
{
int random = rand.Next(1, 4);
DisplayChallenge(ChallengeFactory.GetChallenge(random));
}
private void DisplayChallenge(ChallengeFactory.Challenge challengeToDisplay)
{
DifficultyValue.Text = String.Format("{0}%", challengeToDisplay.Difficulty);
CompletionValue.IsChecked = challengeToDisplay.IsChecked;
TitleValue.Text = challengeToDisplay.Title;
QuestionValue.Text = challengeToDisplay.Question;
ImageValue.Source = challengeToDisplay.ImageSource;
ImageValue.Visibility = challengeToDisplay.Visible;
ResourceValue.Text = challengeToDisplay.ResourceValue;
AnswerValue.Text = challengeToDisplay.Answer;
}
}
ChallengeFactory.cs
public static class ChallengeFactory
{
public class Challenge
{
public int Difficulty { get; set; }
public bool IsChecked { get; set; }
public string Title { get; set; }
public string Question { get; set; }
public Uri ImageSource { get; set; }
public bool Visible { get; set; }
public string ResourceValue { get; set; }
public string Answer { get; set; }
private Challenge(int difficulty, bool isChecked, string title, string question, Uri imageSource, bool visible, string resourceValue, string answer)
{
// assign each of the arguments to the instance properties
}
}
public static Challenge GetChallenge(int challengeNumber)
{
switch(challengeNumber)
{
case 1:
return new Challenge(20, false, "Chicken or Egg?", "Can you answer the ancient question: Which came first the chicken of the egg?", new Uri("Images/Challenge1.png", UriKind.Relative), true, "Resource: Brain Games", "The Egg...");
break;
case 2:
// new challenge for challenge #2
break;
case 3:
// new challenge for challenge #3
break;
}
}
}
Обратите внимание, что я сделал класс Challenge вложенным классом внутри класса Factory. Хорошая вещь в этом состоит в том, что вы можете сделать конструктор задачи private
(что означает, что вы не можете создавать «недопустимые» типы вызовов с помощью чего-либо, кроме метода фабрики. Плохая вещь в этом состоит в том, что вам необходимо дополнительно квалифицировать класс Challenge, добавив к нему префикс, содержащий класс, то есть ChallengeFactory
. дополнительный квалификатор в этом случае.
В конечном счете, я думаю, что вы застряли с необходимостью создать переключатель КУДА-ТО , если вы планируете определить все свои проблемы в коде. Как уже говорили другие, вы можете значительно сократить объем кода, который вам нужно написать (и, следовательно, переключить), определив свои проблемы во внешнем источнике данных (например, в базе данных) и имея один метод для чтения, анализа и создать Challenge
экземпляр.