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

标签 c# object methods reference

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

//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/

相关文章:

c# - 强制 EF ApplicationUser 加载导航属性

c# - 根据条件从列表中删除项目

python - 如何更新 sklearn 类中的 fit 方法?

php - Codeigniter:在模型与 Controller 、模型与模型、 Controller 与 Controller 之间使用变量的最简单方法

java - 列出 Java 中 Groovy 类的已声明方法

c# - 如何修复 .NET Windows 应用程序在启动时崩溃并出现异常代码 : 0xE0434352?

c# - 如何使用 Autofac 注入(inject) AutoMapper?

C# 绑定(bind)对象到字符串

java - 2 "linked"对象

java - 为什么我无法使用父类型访问子对象方法