【发布时间】:2016-07-10 20:45:57
【问题描述】:
我正在学习 FizzBuzz 模型并尝试以尽可能多的面向对象的方式来完成它,刚刚开始学习 C#。
为此,我尝试使用一个名为 MessageStore 的类来存储各种字符串和整数,以便在运行时传递和引用,而无需尽可能地进行硬编码。
我遇到的问题是我认为我没有正确理解如何或在哪里实例化我的类,以便可以在程序中进一步调用它。
我尝试使用MessageStore returnString 在Program 类的顶部进行实例化,并将该实例分配给Main、returnString = new MessageStore(); 内的变量。
我试图在 `FizzOrBuzz 方法的第一部分调用 returnString 实例,但我不能,不确定这取决于范围吗?
显示的错误是Cannot access non-static field, 'returnString' in static context
我已经尝试从Main 构造函数中删除static,但仍然存在问题。
非常感谢任何帮助。
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 部分中看到太多好处。相反,您需要一些涉及相关对象层次结构的问题(形状和动物是典型示例)。
标签: c# constructor fizzbuzz