我正在浏览FizzBuzz kata并尝试尽可能以面向对象的方式进行,只是开始学习C#。
在这个追求中,我试图使用一个名为MessageStore
的类来存储各种字符串和整数,以便在运行时传递和引用,而不必尽可能地硬编码。
我遇到的问题是,我认为我没有正确理解如何或在何处实例化我的课程,以便可以进一步调用该程序。
我尝试使用Program
在MessageStore returnString
类的顶部进行实例化,并将该实例分配给Main
,returnString = 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; }
}
}
}
答案 0 :(得分:1)
将此行设为静态
static MessageStore returnString;
这是因为你的所有函数都是静态的,因此它们只能访问静态类成员,因此最简单的解决方案是将对象标记为静态,因为你一次只能有一个实例。