2016-07-10 4 views
-2

Я просматриваю 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; } 
     } 

    } 
} 
+0

Если ваша основная цель - узнать больше об объектной ориентации, то FizzBuzz не является большой проблемой для выбора, так как вы просто закончите сложность, не видя большой выгоды от части OO. Вместо этого вам нужна какая-то проблема, связанная с иерархией связанных объектов (фигуры и животные - канонические примеры). –

ответ

1

сделать эту линию статического

static MessageStore returnString; 

Это происходит потому, что все ваши функции являются статическими, следовательно, они могут получить доступ только члены статических классов, поэтому самым простым решением является пометить объект как статические, так у вас будет только один экземпляр этого за раз.

+1

Сделайте 'FizzOrBuzz' метод' static', а также, чтобы избежать другой ошибки! – niksofteng

+0

@NikhilVartak Да, я, должно быть, изменил это, когда я возился раньше, спасибо! –

+0

У меня проблема при попытке вызвать 'returnString.ReturnFizzBuzz()'. 'Невозможно получить доступ к ссылке экземпляра?? –

Смежные вопросы