用于实例化类

时间:2016-07-10 20:45:57

标签: c# constructor fizzbuzz

我正在浏览FizzBu​​zz kata并尝试尽可能以面向对象的方式进行,只是开始学习C#。 在这个追求中,我试图使用一个名为MessageStore的类来存储各种字符串和整数,以便在运行时传递和引用,而不必尽可能地硬编码。

我遇到的问题是,我认为我没有正确理解如何或在何处实例化我的课程,以便可以进一步调用该程序。

我尝试使用ProgramMessageStore returnString类的顶部进行实例化,并将该实例分配给MainreturnString = new MessageStore();中的变量。

我试图在`FizzOrBuzz方法的第一部分调用returnString实例,但我不能,不确定这是否属于范围?

显示的错误是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; }
        }

    }
}

1 个答案:

答案 0 :(得分:1)

将此行设为静态

static MessageStore returnString;

这是因为你的所有函数都是静态的,因此它们只能访问静态类成员,因此最简单的解决方案是将对象标记为静态,因为你一次只能有一个实例。

相关问题