C# 如何从一个类调用另一个类中的方法?
好的,我现在已经编辑了这篇原创文章中的所有内容。我回到了VisualStudio2010,创建了一个新项目,并编写了相同的代码,除了只编写了最简单的代码,以获得与以前相同的路障。这意味着我在这里发布了整个项目代码,但它也非常简短和可读。我也加入了一些评论,以便更容易理解。 简单回顾一下:问题是我无法从Form1本身以外的任何其他类成功调用C# 如何从一个类调用另一个类中的方法?,c#,class,object,methods,call,C#,Class,Object,Methods,Call,好的,我现在已经编辑了这篇原创文章中的所有内容。我回到了VisualStudio2010,创建了一个新项目,并编写了相同的代码,除了只编写了最简单的代码,以获得与以前相同的路障。这意味着我在这里发布了整个项目代码,但它也非常简短和可读。我也加入了一些评论,以便更容易理解。 简单回顾一下:问题是我无法从Form1本身以外的任何其他类成功调用Form1.refreshScore() 您必须向类方法添加static public class Class1 { public static voi
Form1.refreshScore()
您必须向类方法添加
static
public class Class1
{
public static void MyMethod(float x)
{
return x*x ;
}
}
您可以这样调用您的方法:
float y = Class1.MyMethod(5.24);
答案已在您提供的代码中
static
。如果将方法声明为静态,则在调用该方法之前不需要实例化类(即不执行步骤1)。例如:
public class Class1
{
public static void Method1()
{
//some code
}
}
public class Class2
{
Class1.Method1(); //you do not need to instantiate the class if your method is static
}
PS:如果您将方法声明为static
,但尝试使用类的实例(object.MethodName
)调用该方法,则会出现编译器错误,提示您不应使用实例调用静态方法
我建议你仔细阅读这些参考资料以便更好地理解:。更好的是,你应该读一本关于面向对象编程的书。我假设你有一个WinForms应用程序,
Form1
是在你的项目中创建的默认表单类
在这种情况下,应用程序的主要方法可能是创建Form1
的实例并显示它。但是,您的敌人
类正在创建自己的Form1
类实例:
Form1 form1 = new Form1();
这与正在显示的实例完全不同。您需要给您的敌人显示的实例。也许最简单的方法是让Form1
创建一个敌人的实例,并将此
传递给它。例如:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
_enemy = new Enemy( this );
}
private Enemy _enemy;
}
然后你的敌人
类看起来像这样:
public class Enemy
{
public Enemy( Form1 form )
{
_form1 = form;
}
// DON'T initialize this with new Form1();
private Form1 _form1;
}
现在,当您的Form1
被创建时,它将创建一个敌方
的实例,然后该实例将获得对表单的引用。关于如何从另一个类调用类,有很多示例。没有必要提出这样的新问题,除非你有一个特定的问题,而在你的情况下,这个问题看起来不是这样的,因为你似乎只是想找到解决问题的方法。开始看看这个问题的答案是的,你是对的(我真的很抱歉这么做,我知道这很烦人)。但我看过那一页(以及其他许多页),它们似乎都提出了相同的几个解决方案,但对我来说没有一个是有意义的。解决方案都与此类似:将所有类/方法转换为“静态”类型-我不太明白这意味着什么,它会立即导致我的所有代码显示编译错误。我是C#新手,无法理解我需要做什么才能从中获得可引用的对象到点表示法调用方法(如上面的示例),因为这似乎很简单…顺便说一句,您可以将一块代码粘贴到文本编辑器中,然后突出显示它,然后单击{}
按钮使其成为代码示例。刚刚发现!谢谢,好的。。代码似乎没有任何会导致编译器错误的错误。到底是什么不起作用?您希望程序实现和输出什么?是的,我正在尝试实例化这些类,正如您在上面的虚拟代码中看到的那样,我通过逐字逐句地遵循无数教程来实现,只是不调用这些方法。它的编译和运行,但我唯一的结论是它试图调用一个不是表单的对象;i、 e.一个“空白”的新的不是实际的?呃,对不起,我还没有完全掌握编码语音;P每当我将静态添加到任何内容时,我都会得到编译错误:“非静态字段、方法或属性需要对象引用…”@ZOMGbies我不确定我是否理解您所说的“空白新表单”是什么意思。但是,请确保将方法声明为静态。请检查您是否正在尝试从静态方法中调用非静态方法。这将不起作用,因为静态方法没有类的实例可调用。public static void refreshKillCount(){label.Text=“texthhere”;}
这给了我上面提到的编译错误…@ZOMGbies请编辑您的问题,以包括产生错误的实际代码。包括您希望调用的方法和调用方方法本身,以及它们的类。这也是我的谷歌搜索告诉我的。但是每当我这样做的时候,每个变量都会出现这个编译错误:“非静态字段、方法或属性需要一个对象引用…”+1 LOL我没想到!我真蠢。在DeathCheck
方法中传递表单实例是否比在foreign
类中传递表单实例更合适好吧,这真的取决于如何使用所有这些。如果该方法是敌人
需要与表单交互的唯一时间,那么我会说是。如果敌人
需要更频繁地与表单交互,我会说不。一般来说,我不认为我会有一个非表单类直接对表单进行操作。相反,我可能会让表单从敌人那里获取数据,然后处理如何以及在何处显示这些数据。我同意,我会让表单处理显示本身。在这种情况下,我可能会通过引用方法传递一个参数以返回killedCount
,或者传递label控件而不是整个for
public class Enemy
{
public Enemy( Form1 form )
{
_form1 = form;
}
// DON'T initialize this with new Form1();
private Form1 _form1;
}