gpt4 book ai didi

C#:非静态字段、方法或属性需要对象引用

转载 作者:行者123 更新时间:2023-11-30 16:21:41 24 4
gpt4 key购买 nike

当有这么多相关问题但我无法找到/理解我正在寻找的答案时,我问这个问题感到很遗憾。

//2. 开发一个程序,将货币 X 转换为货币 Y,反之亦然。

using System;

class Problem2
{
static void Main (string[] args)
{
while (true) {
Console.WriteLine ("1. Currency Conversion from CAD to Won");
Console.WriteLine ("2. Currency Conversion from Won to Cad");
Console.Write ("Choose from the Following: (1 or 2)? ");
int option = int.Parse( Console.ReadLine() );
//double x;
if (option == 1) {
Console.WriteLine ("Type in the amount you would like to Convert CAD to Won: ");
//double y =double.Parse( Console.ReadLine());
//Console.WriteLine( cadToWon( y ) );
Console.WriteLine( cadToWon( double.Parse( Console.ReadLine() ) ));
}
if (option == 2) {
Console.WriteLine ("Type in the amount you would like to Convert Won to CAD: ");
Console.WriteLine( wonToCad (double.Parse( Console.ReadLine())));
}
}
}

double cadToWon( double x )
{
return x * 1113.26;
}

double wonToCad( double x)
{
return x / 1113.26;
}
}

这给了我错误消息“非静态字段、方法或属性‘Problem2...需要一个对象引用’”我知道如果我在这些方法,但我想知道为什么我需要它(我认为这是因为 Main 是静态的?)以及我需要更改什么才能使用这些方法而不向它们添加静态?

谢谢

最佳答案

因为您的 Main 方法是静态的,如果您想从 Main 中调用它们,cadToWon 和 wonToCad 必须是静态的。

static double cadToWon(double x) //...


static double wonToCad(double x) //...

另一种选择是将 Main、cadToWon 和 wonToCad 方法的所有逻辑分解为一个新类,然后让 Main 方法简单地设置并运行该新类.但我怀疑这可能超出了您的任务范围。


为了回答您为什么添加静态可以使这项工作有效的问题:

static 方法在一个类的所有实例中共享。因此,无论您在 Problem2 类的哪个实例中,都只有一个一个 Main 方法在所有实例中共享。

然而,

cadToWon 是一个实例 方法。它属于 Problem2 类的特定 实例。

因此,您无法从 Main 调用 cadToWon,因为 Main 不知道什么实例Problem2 来调用 cadToWonMain 不知道要在哪个实例上调用 cadToWon,因为 Main属于任何实例。

关于C#:非静态字段、方法或属性需要对象引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12999919/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com