可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I'm learning C# and I'm very new to it, so forgive me for the seemingly stupid question. I have some experience in Java, and I noticed that C# programs also need a main()
method in their main class.
What if I want to create a class that isn't a main class, i.e. one that I import into a main class?
I tried to do that, and when I compile (via cmd using csc File.cs
) the compiler says that the .exe that it will make has no main()
method. Does that mean that I was wrong, and every class needs a main()
method, or that I'm compiling it wrongly?
Maybe the problem's in the code (since I'm relying on my knowledge of Java syntax), which looks like this:
public class Class
{
int stuff;
public Class(int stuff)
{
this.stuff = stuff;
stuff();
}
public void method()
{
stuff();
}
}
EDIT: I'm afraid this is terribly misunderstood. I'm not asking if the file needs a main method, I'm asking how I can import this class into another class, because I realise that if I am to do this I can't have a main (as I said, I have some Java experience), but whenever I try to compile without one the compiler tells me that I need one.
回答1:
Not all classes need Main
method.
As MSDN States
The Main method is the entry point of a C# console application or
windows application. (Libraries and services do not require a Main
method as an entry point.). When the application is started, the Main
method is the first method that is invoked.
There can only be one entry point in a C# program. If you have more
than one class that has a Main method, you must compile your program
with the /main compiler option to specify which Main method to use as
the entry point.
Only one class need to keep the Main
method, the class which acts as entry point of the application.
The signature of the main method is : static void Main(string[] args)
or static void Main()
or static int Main(string[] args)
or static int Main()
Check out this link for more details : Main() and Command-Line Arguments (C# Programming Guide
)
For your above example:
public class MyClassName // changed the class name, avoid using the reserved keyword :P
{
int stuff;
public MyClassName(int stuff) // is the constructor
{
this.stuff = stuff;
}
public void method()
{
stuff = 1;
}
}
If you need to use that class, you can create a static class with main method:
class ProgramEntry
{
static void Main(string[] args)
{
MyClassName classInstance = new MyClassName(2);
classInstance.method();
}
}
回答2:
In this scenario you need at least one class in your code with the Main
method in it. The other classes do not need the Main
method.
回答3:
C# application must have at least one class with Main method, so that execution can begin from it. Application can have plenty of classes, but only one class with only one Main method is required.
C# library does not have to have a Main method.
回答4:
If this is a console application, you need a Main method to start with. Otherwise (web application, for example), you don't need one.
回答5:
Try using /t:library
switch with the compiler. By default it tries to make an .exe
which, of course, needs an entry point (i.e. a main
method). If you compile to a .dll
you won't need that.
But as HighCore suggested, if you are learning, just use Visual Studio (download one of the free versions if you haven't already) and let it worry about the compiler flags.
回答6:
You only need a main
method when you build an executable assembly (.exe), and you only need it in one class. This method will be the default entry point where execution starts. You don't need a main
method when you build your code as a class library (.dll).
回答7:
Only one class with one method should be fine. If you want, you can set up the start up object in visual studio in the settings.
回答8:
C# class without Main() means, you can compile it as a library (.dll)
csc /target:library YourClassFileName.cs or csc /t:library YourClassFileName.cs to make it as YourClassFileName.dll file and then you can use it in another class file which have the Main() method (Entry point)
csc /reference:YourClassFileName.cs YourMainClassFileName.cs
or
csc /r:YourClassFileName.cs YourMainClassFileName.cs
to make an YourMainClassFileName.exe file
回答9:
static void main(string[] args)
method in C# programs is the start point to execute. If you try to compile a single C# File, the compiler will find this method to start the execution. You don't need to create the method in a class you are using as a model, but you have to have this method on a Console Program, WinForms, etc...