【问题标题】:Why can't I call a public method in another class?为什么我不能在另一个类中调用公共方法?
【发布时间】:2010-09-24 17:08:32
【问题描述】:

我已经让这两个类进行交互,我试图从第一类调用四个不同的类以在第二类中使用。

这些方法是公开的,它们确实返回值,但由于某种原因没有建立连接。 我尝试时得到的错误是:"An object reference is required for the nonstatic field, method, or property 'GradeBook.[method I want called]'"


我已经初始化了一切。我不想将方法创建为静态的。我再次阅读了我的任务的细节,我什至不应该这样做,但无论如何我似乎无法让它发挥作用。

myGradeBook.[方法] GraceBook.[方法]

这一切似乎都会产生错误。

当前错误:

The best overloaded method match or 'System.Console.WriteLine(string, object)' has some invalid arguments.

Arugment '2': cannot convert from 'method group' to 'object'

我什至不知道这些是什么意思....

编辑: 由于 Visual Studio 的 Step Into 功能,我刚刚解决了这个问题。 我不知道为什么我花了这么长时间才使用它。

【问题讨论】:

  • 请添加更多说明,例如您是如何调用该方法的,它是静态方法还是实例方法等。否则这个问题将留待解释......一切顺利。
  • 嗯,我从你的作业中学到了一些东西......

标签: c# methods call


【解决方案1】:

您正在尝试调用该类的实例方法。要在类上调用实例方法,您必须创建一个实例来调用该方法。如果要在非实例上调用该方法,请添加 static 关键字。例如

class Example {
  public static string NonInstanceMethod() {
    return "static";
  }
  public string InstanceMethod() { 
    return "non-static";
  }
}

static void SomeMethod() {
  Console.WriteLine(Example.NonInstanceMethod());
  Console.WriteLine(Example.InstanceMethod());  // Does not compile
  Example v1 = new Example();
  Console.WriteLine(v1.InstanceMethod());
}

【讨论】:

  • 当我将要调用的方法更改为静态时,该方法中的变量会变得疯狂,并且会出现更多错误。我赢不了。
  • 是的,你可以——如果你想调用一个实例方法,就在一个实例上调用它。这是唯一有意义的方法。否则,这就像让“狗”跑,而不是让特定的狗跑。
  • 后续问题对我有利。您能否在不创建类的实例的情况下调用静态方法,因为看起来这就是您在示例中所做的。我一定会在星期一试试这个。感谢分享。
  • @discorax,是的。在不创建类的实例的情况下调用静态方法是完全合法的
  • “亲爱的,你今天早上遛狗了吗?” /“没有,但我已经走狗的概念了。”
【解决方案2】:

听起来你没有实例化你的类。这就是我收到“需要对象引用”错误的主要原因。

MyClass myClass = new MyClass();

添加该行后,您就可以调用您的方法

myClass.myMethod();

另外,您的所有类都在同一个命名空间中吗?当我第一次学习 c# 时,这对我来说是一个常见的绊脚石。

【讨论】:

  • +1 因为它看起来像是一个正确的答案。无论谁对此投了反对票,我希望他们能在这里发表评论。
  • 起初我认为这可行,但它在 IDE 中创建了一个递归错误,并在解决方案加载时使其崩溃。这是一个很大的错误,但我现在必须找到一个替代方案。 Form1 myClass = new VisualCues.Form1(); myClass.ReadTheAPETag(myClass.ex);
【解决方案3】:

你必须创建一个类类型的变量,并首先将它设置为对象的一个​​新实例。

GradeBook myGradeBook = new GradeBook();

然后调用刚刚创建的对象上的方法。

myGradeBook.[method you want called]

【讨论】:

  • 我的错,我看错了一些东西,当我过度疲倦时,我在 stackoverflow 上。但是,我现在不能撤消我的反对票;-(
  • 您可以再次点击向下投票箭头以撤消投票。
【解决方案4】:

例如1和2你需要创建静态方法:

public static string InstanceMethod() {return "Hello World";}

那么例如 3,您需要一个对象实例来调用该方法:

object o = new object();
string s = o.InstanceMethod();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 2023-01-13
    • 2015-02-07
    相关资源
    最近更新 更多