Я просматриваю Kata FizzBuzz и стараюсь сделать это как можно больше объектно-ориентированного пути, только что начал изучать C#. В этом преследовании я пытаюсь использовать класс, называемый MessageStore
, для хранения различных строк и целых чисел, которые должны быть переданы и указаны во время выполнения, без необходимости жесткого кода.Область переменной C# для создания экземпляра класса
Проблема, с которой я сталкиваюсь, заключается в том, что я не думаю, что правильно понимаю, как и где создавать экземпляр класса, чтобы его можно было назвать дальше в программу.
Я попытался инстанцирование в верхней части Program
класса с MessageStore returnString
и назначением этого экземпляра к переменному в Main
, returnString = new MessageStore();
.
Я пытаюсь вызвать экземпляр returnString
в первой части метода FizzOrBuzz, но я не могу, не уверен, что это до масштаба?
Ошибка, которая показывает, является Cannot access non-static field, 'returnString' in static context
я попытался удалить static
из Main
конструктора, но это по-прежнему уходит с вопросами.
Любая помощь очень ценится.
using System;
using System.CodeDom;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;
namespace FizzBuzz
{
class Program
{
// Instantiating MessageStore
MessageStore returnString;
static void Main(string[] args)
{
// Assigning instance a variable name
returnString = new MessageStore();
PlayFizzBuzz(100);
MessageHelper(MessageStore.ReturnCompletedMessage());
Console.ReadLine();
}
public static void PlayFizzBuzz(int startNumber)
{
for (int i = startNumber; i >= 0; i--)
{
if (i == 0)
{
break;
}
MessageHelper(FizzOrBuzz(i));
}
}
public static String FizzOrBuzz(int numberInLoop)
{
if (MultipleCheck(numberInLoop, MessageStore.ReturnThree()) && MultipleCheck(numberInLoop, MessageStore.ReturnFive()))
{
// Trying to call instance with variable name
return returnString.ReturnFizzBuzz();
}
if (MultipleCheck(numberInLoop, MessageStore.ReturnThree()))
{
return MessageStore.ReturnFizz();
}
if (MultipleCheck(numberInLoop, MessageStore.ReturnFive()))
{
return MessageStore.ReturnBuzz();
}
else
return numberInLoop.ToString();
}
public static bool MultipleCheck(int numberToAssess, int multiple)
{
return (numberToAssess % multiple == 0) ? true : false;
}
public static void MessageHelper(string messageText)
{
Console.WriteLine(messageText);
}
class MessageStore
{
public static string ReturnFizz() { return "Fizz!"; }
public static string ReturnBuzz() { return "Buzz!"; }
public static string ReturnFizzBuzz() { return "FizzBuzz!"; }
public static string ReturnCompletedMessage() { return "Looks like we're done here!"; }
public static int ReturnThree() { return 3; }
public static int ReturnFive() { return 5; }
}
}
}
Если ваша основная цель - узнать больше об объектной ориентации, то FizzBuzz не является большой проблемой для выбора, так как вы просто закончите сложность, не видя большой выгоды от части OO. Вместо этого вам нужна какая-то проблема, связанная с иерархией связанных объектов (фигуры и животные - канонические примеры). –