为啥我不能在另一个类中调用公共方法?

Posted

技术标签:

【中文标题】为啥我不能在另一个类中调用公共方法?【英文标题】: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 功能,我刚刚解决了这个问题。 我不知道为什么我花了这么长时间才使用它。

【问题讨论】:

请添加更多说明,例如您是如何调用该方法的,它是静态方法还是实例方法等。否则这个问题将留待解释......一切顺利。 嗯,我从你的作业中学到了一些东西...... 【参考方案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]

【讨论】:

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

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

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

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

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

【讨论】:

以上是关于为啥我不能在另一个类中调用公共方法?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能在同一类的受保护方法中调用方法[重复]

THINKPHP怎么在类中做一个公共的方法,让此类中得方法在运行时都先运行这个方法!

为啥我不能从其他类访问公共变量?

为啥我不能在我的类中内联函数? [复制]

为啥非 const 方法是私有的时不调用公共 const 方法?

从 javascript 类中的“私有”方法访问“公共”方法