我一直在尝试简单的实验来学习C#方法.下面的代码只是调用playerSelection(),它向用户询问一个字符并将该字符返回给Main(string [] args).主要打印到控制台.使用下面的代码我得到以下错误"非静态字段需要对象引用."
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace SimpleFunction
{
class Program
{
static void Main(string[] args)
{
char cplayerChoice = playerSelection();
Console.WriteLine(cplayerChoice);
}
char playerSelection()
{
Console.WriteLine("\nEnter a Character");
char cplayerChoice = Console.ReadKey().KeyChar;
return cplayerChoice;
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在如果我像这样添加单词static:
static char playerSelection()
Run Code Online (Sandbox Code Playgroud)
它编译和工作.我确实理解静态与非......抽象.
我正在从一本书中学习C#,在那本书中,他们通过下面的例子来说明使用方法:
using System;
namespace GetinPaid
{
class Program
{
static void Main(string[] args)
{
(new Program()).run();
}
void run()
{
double dailyRate = readDouble("Enter your daily rate:");
int noOfDays = readInt("Enter the number of days: ");
writeFee(calculateFee(dailyRate, noOfDays));
}
private void writeFee(double p)
{
Console.WriteLine("The consultant's fee is: {0}", p * 1.1);
}
private double calculateFee(double dailyRate, int noOfDays)
{
return dailyRate * noOfDays;
}
private int readInt(string p)
{
Console.Write(p);
string line = Console.ReadLine();
return int.Parse(line);
}
private double readDouble(string p)
{
Console.Write(p);
string line = Console.ReadLine();
return double.Parse(line);
}
}
}
Run Code Online (Sandbox Code Playgroud)
为什么在他们的例子中他们可以调用方法而不使用关键字static但我必须使用它?
谢谢!
在他们的榜样,他们正在创建一个实例的Program,并呼吁该实例的方法:
(new Program()).run();
Run Code Online (Sandbox Code Playgroud)
这更干净地写成:
Program program = new Program();
program.run();
Run Code Online (Sandbox Code Playgroud)
在这些实例方法中,您可以调用其他实例方法,因为您隐式调用它们this.
顺便说一句,如果真的是书中的示例代码,我建议你得到一本不同的书:那里的风格有一些非常值得怀疑的方面.特别是:
private明确的还是隐含的不一致ReadInt32代替readInt.同样,它对私人方法来说并不重要,但这是一个不好的习惯double货币价值是一个非常糟糕的主意p没有给出信息(在各个地方,用于不同的含义)TryParse而不是Parse,并检查返回值,然后可能重新输入错误的输入| 归档时间: |
|
| 查看次数: |
202 次 |
| 最近记录: |