【问题标题】:C# - Calling a function from static mainC# - 从静态 main 调用函数
【发布时间】:2013-05-28 09:09:21
【问题描述】:

我的问题可能很基础,但我没有找到答案...

我在 program.cs 中编写了一个函数(获取 2 个字符串的公共 checkSomething) 当我尝试从静态 main 调用此函数时 我收到了这个错误:

"非静态字段、方法或对象需要对象引用 属性'checkSomething(string,string)'"。

但是,当我将 main 更改为 Public(而不是静态)时,没有错误。 为什么会这样?有什么更好的 - 是否有一个静态主?为什么它甚至重要?

谢谢!

【问题讨论】:

  • 把你的函数作为静态的,public static checkSomething(string x, string x2)
  • 你对static的含义了解多少?
  • @Pierre-LucPineault:这不一定合适。我们根本无法用这么少的信息来判断。目前似乎很清楚的是,OP 应该更多地了解 static 的含义 - 而且 SO 并不是通过 IMO 书籍或好的教程来做到这一点的好方法。
  • 阅读更多关于静态类/成员的信息 -> msdn.microsoft.com/en-us/library/79b3xss3(v=vs.80).aspx
  • 在阅读 static 之前,我会先阅读一些关于类和类实例的信息。

标签: c# static main function-calls


【解决方案1】:

这里的问题不是关于静态函数,而是具体为什么mainC# 应用程序中是静态的。

这与主应用程序只有一个线程有关。这是在 main 函数上使用 [STAThread] 属性时定义的。执行线程只进入主函数一次,不需要Program类的实例。

然后静态主函数可以实例化正常操作所需的任何类。这些通常是诸如表单或工人阶级之类的东西。

程序要么进入主线程中的消息循环以处理可见表单,要么程序终止。

当您删除 main 的静态引用时,项目的 build optionsstartup function 切换到 startup object,并在调用 main 之前创建类的实例。

这是个人喜好问题,但请记住,在启动期间只执行 1 个 main。

【讨论】:

  • +1 不仅因为回答了确切的问题,而且因为能够下降到更初级的水平并给出有帮助的答案,而不是约束 OP。
【解决方案2】:

主方法应该是静态的,所以你不能从静态方法中调用非静态方法。

将 checkSomething 更改为静态。

如果主方法不是静态的,那么我们需要创建实例来调用主方法。要再次创建即时,我们需要执行一些代码!这就是为什么我认为这个起点Main 是静态的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    相关资源
    最近更新 更多