C# 在Main方法中调用函数
为什么运行此C#代码会在C# 在Main方法中调用函数,c#,function,call,C#,Function,Call,为什么运行此C#代码会在F1()上显示错误在主目录中 namespace Project1 { public partial class Program1 { private void F1() { Console.WriteLine("F2"); } private void F2() { Console.WriteLine("F1")
F1()上显示错误代码>在主目录中
namespace Project1
{
public partial class Program1
{
private void F1()
{
Console.WriteLine("F2");
}
private void F2()
{
Console.WriteLine("F1");
}
static void Main(string[] args)
{
F1();
}
}
}
这是一个控制台应用程序。如果我定义了类Program1
的对象,它就会工作。
但当我在Windows窗体应用程序上尝试此操作时,我可以将F1()
在按钮中单击
事件,它运行时没有错误,没有定义类Form1的对象
?您没有将方法定义为静态
。因此,您需要首先创建类的实例,然后使用该实例调用它们
如果您想直接调用这些方法,可以将它们设置为static
。在这种情况下,因为您似乎只是显示静态文本,所以这样做很好。然而,通常情况下,方法实际上需要作用于实例,因此必须这样调用。您可能想看看,其中讨论了使方法静态
有意义的时候您还没有将方法定义为静态
。因此,您需要首先创建类的实例,然后使用该实例调用它们
如果您想直接调用这些方法,可以将它们设置为static
。在这种情况下,因为您似乎只是显示静态文本,所以这样做很好。然而,通常情况下,方法实际上需要作用于实例,因此必须这样调用。您可能想看看,其中讨论了使您的方法成为静态方法的意义,下面是两个备选方案:
namespace Project1
{
public partial class Program1
{
private void F1()
{
Console.WriteLine("F1");
}
private void F2()
{
Console.WriteLine("F2");
}
static void Main(string[] args)
{
var program1 = new Program1();
program1.F1();
}
}
}
或者
顺便说一句,我更改了您的WriteLine文本以反映正在调用的函数。以下是两个备选方案:
namespace Project1
{
public partial class Program1
{
private void F1()
{
Console.WriteLine("F1");
}
private void F2()
{
Console.WriteLine("F2");
}
static void Main(string[] args)
{
var program1 = new Program1();
program1.F1();
}
}
}
或者
顺便说一句,我更改了WriteLine文本以反映所调用的函数。您忘记将方法F1()&F2()标记为静态!让它读起来像:private static void F1()…我注意到您颠倒了要写出的字符串-您的F1函数写出了“F2”。您忘了将方法F1()&F2()标记为static!让它读起来像:private static void F1()…我注意到您颠倒了要写出的字符串-您的F1函数写出了“F2”。谢谢您的回答,但是当我将这些没有静态的方法放在“windows窗体应用程序”中时,为什么这些方法可以工作?例如,我可以在button clicked事件中调用它们,而不将它们声明为静态?Program1是一个分部类-这意味着还有一些其他文件包含另一组函数,这些函数是这个Program1类的一部分。如果button clicked事件函数是Program1类的一部分(可能在另一个文件中),并且它不是静态的,那么它可以调用类中的非静态函数。我指的是在窗体上创建一个带有按钮的新Windows窗体应用程序。如果我将上述代码中的粘贴“Function F1”复制到button_clicked事件附近,我可以在button clicked事件中调用F1()。所以问题是为什么它在那里工作而在控制台应用程序中不工作?区别在于您的按钮单击事件不是静态的,而控制台应用程序中的主要功能是静态的。如果没有拥有非静态函数的类的实例,则无法在静态函数中调用非静态函数。请查看此MSDN页面上的静态vs实例成员:感谢您的回答,但是,当我将这些没有静态的方法放入“windows窗体应用程序”中时,为什么这些方法可以工作?例如,我可以在button clicked事件中调用它们,而不将它们声明为静态?Program1是一个分部类-这意味着还有一些其他文件包含另一组函数,这些函数是这个Program1类的一部分。如果button clicked事件函数是Program1类的一部分(可能在另一个文件中),并且它不是静态的,那么它可以调用类中的非静态函数。我指的是在窗体上创建一个带有按钮的新Windows窗体应用程序。如果我将上述代码中的粘贴“Function F1”复制到button_clicked事件附近,我可以在button clicked事件中调用F1()。所以问题是为什么它在那里工作而在控制台应用程序中不工作?区别在于您的按钮单击事件不是静态的,而控制台应用程序中的主要功能是静态的。如果没有拥有非静态函数的类的实例,则无法在静态函数中调用非静态函数。请查看此MSDN页面,了解静态vs实例成员: