低分麻烦大家给我做个main方法总结

C# main\u65b9\u6cd5\u5199\u5728\u54ea\u91cc

main\u53ef\u4ee5\u548cClass\u5e73\u7ea7
\u7ed9\u4f60\u770b\u8fd9\u4e2a\u4f8b\u7a0b\u5c31\u660e\u767d\u4e86\uff1a
//\u4ee5\u4e0b\u662f\u5bfc\u5165\u547d\u540d\u7a7a\u95f4\u7684\u4ee3\u7801
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//\u4ee5\u4e0b\u662f\u5f53\u524d\u547d\u540d\u7a7a\u95f4
namespace ConsoleApplication1
{
//\u5e94\u7528\u7a0b\u5e8f\u7c7b
class Program
{
//\u7a0b\u5e8f\u7684\u5165\u53e3\uff0c\u5373Main\u51fd\u6570
static void Main(string[] args)
{
double a0 = Convert.ToDouble(Console.ReadLine());
double n = Convert.ToDouble(Console.ReadLine());
double an = a0;
double sum = 0;
for (int i = 0; i < n; i++)
{
if (i==0)
{
an = a0;
}
else
{
an = an + a0 * Math.Pow(10, i);
}
sum += an;
}
Console.WriteLine(sum);
}
}
}

1 \u5728package1\u4e2d\u5f15\u5165package2\u4e2d\u7684\u7c7bB
import package2.B;
class A{
public static void main(String[] args){
new B();//\u521b\u5efa\u5bf9\u8c61
}
}
2, \u901a\u8fc7\u5b8c\u6574\u5305\u540d\u7c7b\u540d\u521b\u5efa
class A{
public static void main(String[] args){
new package2.B();//\u521b\u5efa\u5bf9\u8c61
}
}

“Hello World!”程序是程序员一直以来的一个浪漫约定,也是一个伟大的梦想--总有一天,出自人类之手的计算机会面对这个美丽的世界说一声“Hello World!”。它是学习一门新语言的一个很好的起点,我们就从这里开始,看下面例子:
1 //HelloWorld.cs by Cornfield,2001
2 //csc HelloWorld.cs
3 using System;
4 class HelloWorld
5 {
6 public static void Main()
7 {
8 Console.WriteLine("Hello World !");
9 }
10 }
11
12
我们可以打开Windows自带的简易的"记事本"程序来编写这段代码--笔者推荐刚开始采用这个极其简单却能把程序代码暴露的相当清晰的编辑工具。我们将它的文件名保存为HelloWorld.cs,其中".cs"是C#源代码文件的扩展名。然后在配置好C#编译器的命令行环境里键入"csc HelloWorld.cs"编译文件。可以看到编译输出文件HelloWorld.exe。我们键入HelloWorld执行这个文件可得到下面的输出:

Hello World !

下面我们来仔细分析上面的代码和整个程序的编译输出及执行过程。先看文件开始的两行代码,这是C#语言的单行注释语句。和C++语言类似,C#支持两种注释方法:以"//"开始的单行注释和以"/*","*/"配对使用的多行注释。注释之间不能嵌套。

再来看下面的"using System;"语句,这是C#语言的using命名空间指示符,这里的"System"是Microsoft.NET系统提供的类库。C#语言没有自己的语言类库,它直接获取Microsoft.NET系统类库。Microsoft.NET类库为我们的编程提供了非常强大的通用功能。该语句使得我们可以用简短的别名"Console"来代替类型"System.Console"。当然using指示符并不是必须的,我们可以用类型的全局名字来获取类型。实际上,using语句采用与否根本不会对C#编译输出的程序有任何影响,它仅仅是简化了较长的命名空间的类型引用方式。

接着我们声明并实现了一个含有静态Main()函数的HelloWorld类。C#所有的声明和实现都要放在同一个文件里,不像C++那样可以将两者分离。Main()函数在C#里非常特殊,它是编译器规定的所有可执行程序的入口点。由于其特殊性,对Main()函数我们有以下几条准则:

1.
Main()函数必须封装在类或结构里来提供可执行程序的入口点。C#采用了完全的面向对象的编程方式,C#中不可以有像C++那样的全局函数。

2.
Main()函数必须为静态函数(static)。这允许C#不必创建实例对象即可运行程序。

3.
Main()函数保护级别没有特殊要求, public,protected,private等都可,但一般我们都指定其为public。

4.
Main()函数名的第一个字母要大写,否则将不具有入口点的语义。C#是大小写敏感的语言。

5.
Main()函数的参数只有两种参数形式:无参数和string 数组表示的命令行参数,即static void Main()或static void Main(string[]args) ,后者接受命令行参数。一个C#程序中只能有一个Main()函数入口点。其他形式的参数不具有入口点语义,C#不推荐通过其他参数形式重载Main()函数,这会引起编译警告。

6.
Main()函数返回值只能为void(无类型)或int(整数类型)。其他形式的返回值不具有入口点语义。

我们再来看"HelloWorld.cs"程序中Main()函数的内部实现。前面提过,Console是在命名空间System下的一个类,它表示我们通常打交道的控制台。而我们这里是调用其静态方法WriteLine()。如同C++一样,静态方法允许我们直接作用于类而非实例对象。WriteLine()函数接受字符串类型的参数"Hello World !",并把它送入控制台显示。如前所述,C#没有自己的语言类库,它直接获取Microsoft.NET系统类库。我们这里正是通过获取Microsoft.NET系统类库中的System.Console.WriteLine()来完成我们想要的控制台输出操作。这样我们便完成了"Hello World!"程序。

但事情远没那么简单!在我们编译输出执行程序的同时,Microsoft.NET底层的诸多机制却在暗地里涌动,要想体验C#的锐利,我们没有理由忽视其背靠的Microsoft.NET平台。实际上如果没有Microsoft.NET平台,我们很难再说C#有何锐利之处。我们先来看我们对"HelloWorld.cs"文件用csc.exe命令编译后发生了什么。是的,我们得到了HelloWorld.exe文件。但那仅仅是事情的表象,实际上那个HelloWorld.exe根本不是一个可执行文件!那它是什么?又为什么能够执行?
好的,下面正是回答这些问题的地方。首先,编译输出的HelloWorld.exe是一个由中间语言(IL),元数据(Metadata)和一个额外的被编译器添加的目标平台的标准可执行文件头(比如Win32平台就是加了一个标准Win32可执行文件头)组成的PE(portable executable,可移植执行体)文件,而不是传统的二进制可执行文件--虽然他们有着相同的扩展名。中间语言是一组独立于CPU的指令集,它可以被即时编译器Jitter翻译成目标平台的本地代码。中间语言代码使得所有Microsoft.NET平台的高级语言C#,VB.NET,VC.NET等得以平台独立,以及语言之间实现互操作。元数据是一个内嵌于PE文件的表的集合。元数据描述了代码中的数据类型等一些通用语言运行时(Common Language Runtime)需要在代码执行时知道的信息。元数据使得.NET应用程序代码具备自描述特性,提供了类型安全保障,这在以前需要额外的类型库或接口定义语言(Interface Definition Language,简称IDL)。
这样的解释可能还是有点让人困惑,那么我们来实际的解剖一下这个PE文件。我们采用的工具是.NET SDK Beta2自带的ildasm.exe,它可以帮助我们提取PE文件中的有关数据。我们键入命令"ildasm /output:HelloWorld.il HelloWorld.exe",一般可以得到两个输出文件:helloworld.il和helloworld.res。其中后者是提取的资源文件,我们暂且不管,我们来看helloworld.il文件。我们用"记事本"程序打开可以看到元数据和中间语言(IL)代码,由于篇幅关系,我们只将其中的中间语言代码提取出来列于下面,有关元数据的表项我们暂且不谈:
1 class private auto ansi beforefieldinit HelloWorld
2 extends [mscorlib]System.Object
3 {
4 .method public hidebysig static void Main() cil managed
5 {
6 .entrypoint
7 // Code size 11 (0xb)
8 .maxstack 8
9 IL_0000: ldstr "Hello World !"
10 IL_0005: call void [mscorlib]System.Console::WriteLine(string)
11 IL_000a: ret
12 } // end of method HelloWorld::Main
13 .method public hidebysig specialname rtspecialname
14 instance void .ctor() cil managed
15 {
16 // Code size 7 (0x7)
17 .maxstack 8
18 IL_0000: ldarg.0
19 IL_0001: call instance void [mscorlib]System.Object::.ctor()
20 IL_0006: ret
21 } // end of method HelloWorld::.ctor
22 } // end of class HelloWorld

我们粗略的感受是它很类似于早先的汇编语言,但它具有了对象定义和操作的功能。我们可以看到它定义并实现了一个继承自System.Object 的HelloWorld类及两个函数:Main()和.ctor()。其中.ctor()是HelloWorld类的构造函数,可在"HelloWorld.cs"源代码中我们并没有定义构造函数呀--是的,我们没有定义构造函数,但C#的编译器为我们添加了它。你还可以看到C#编译器也强制HelloWorld类继承System.Object类,虽然这个我们也没有指定。关于这些高级话题我们将在以后的讲座中予以剖析。

那么PE文件是怎么执行的呢?下面是一个典型的C#/.NET应用程序的执行过程:

1.
用户执行编译器输出的应用程序(PE文件),操作系统载入PE文件,以及其他的DLL(.NET动态连接库)。

2.
操作系统装载器根据前面PE文件中的可执行文件头跳转到程序的入口点。显然,操作系统并不能执行中间语言,该入口点也被设计为跳转到mscoree.dll(.NET平台的核心支持DLL)的_ CorExeMain()函数入口。

3.
CorExeMain()函数开始执行PE文件中的中间语言代码。这里的执行的意思是通用语言运行时按照调用的对象方法为单位,用即时编译器将中间语言编译成本地机二进制代码,执行并根据需要存于机器缓存。

4.
程序的执行过程中,垃圾收集器负责内存的分配,释放等管理功能。

5.
程序执行完毕,操作系统卸载应用程序。

清楚的知晓编译输出的PE文件的执行过程是深度掌握C#语言编程的关键,这种过程的本身就诠释着C#语言的高级内核机制以及其背后Microsoft.NET平台种种诡秘的性质。一个"Hello World !"程序的概括力已经足够,在我们对C#语言有了一个很好的起点之后,下面的专题会和大家一起领略C#基础语言,窥探Microsoft.NET平台构造,步步体验C#锐利编程的极乐世界,Let's go!

  • java main鏂规硶涓繕鍙互濂椾釜鏂规硶??
    绛旓細鏂规硶閲岄潰鍙兘璋冪敤鏂规硶 涓嶈兘宓屽瀹氫箟鏂规硶 杩欐槸java鐨勮娉曡瀹 濡傛灉涔︿笂鐨勪唬鐮佺湡鏄偅鏍风殑璇 閭h偗瀹氭槸涔﹀嚭閿欎簡 鏈涢噰绾
  • public static void main (string[] args)鏄粈涔堟剰鎬,璇︾粏鐐
    绛旓細杩欐槸 Java 绋嬪簭鐨勫叆鍙e湴鍧锛孞ava 铏氭嫙鏈鸿繍琛岀▼搴忕殑鏃跺欓鍏堟壘鐨勫氨鏄 main 鏂规硶銆傝窡 C 璇█閲岄潰鐨 main() 鍑芥暟鐨勪綔鐢ㄦ槸涓鏍风殑銆傚彧鏈夋湁 main() 鏂规硶鐨 Java 绋嬪簭鎵嶈兘澶熻 Java 铏氭嫙鏈鸿繍琛岋紝鍙悊瑙d负瑙勫畾鐨勬牸寮忋傚浜庨噷闈㈢殑鍙傛暟鍙婁慨楗扮锛歱ublic锛氳〃绀虹殑杩欎釜绋嬪簭鐨勮闂潈闄愶紝琛ㄧず鐨勬槸浠讳綍鐨勫満鍚堝彲浠ヨ...
  • 鐢–#缂栧啓涓涓柟娉,姹2鐨刋娆℃柟銆傚湪涓绘柟娉Main()涓繘琛屾暟鎹殑杈撳叆銆傛柟娉曠殑...
    绛旓細return result;} public static void main(string[] args){ int n;Console.WriteLine("璇疯緭鍏ヤ竴涓暣鏁");n = int.Parse(Console.ReadLine());Console.WriteLine("2鐨"+n+"娆℃柟绛変簬"+f(n));Console.ReadKey();//鍙兘娌℃敞鎰忓ぇ灏忓啓锛屽笇鏈涜兘琚ゼ涓婚噰绾炽倉 } //>>涓瀹氳閲囩撼鎴戝摝<< ...
  • 鎴戝浜嗕竴涓被,鍏朵腑鏈main鏂规硶!javac鍚庡嵈璇讳笉鍑簃ain鏂规硶,杩欐槸涓轰粈涔堝晩...
    绛旓細鏄晩锛屽悓鎰忎粬浠殑锛岃涔堝氨鏄矾寰勯夐敊浜嗭紝瑕佷笉灏辨槸浣犵殑classpath閰嶇疆閿欎簡锛屽悗闈㈣繕瑕佸姞涓滆タ鐨勶紝jdk濡傛灉浣犳斁鍦╠鐩樼殑璇濓紝classpath瑕佽缃负 .;D:\JDK\LIB\DT.JAR;D:\JDK\LIB\TOOLS.JAR 灏忓啓灏辫浜
  • C# 濡備綍鎶main鏂规硶寰楀埌鐨勫弬鏁癮rgs浼犻掔粰Form1
    绛旓細form1绫讳腑瀹氫箟涓涓叕鍏辩被鍨嬪瓧绗︿覆灏卞彲浠ヤ簡锛焎lass Form1...public string str;鐒跺悗main涓 static void Main(String []args){ ...Form1 fm = new Form1();fm.str = args[1];...} === 杩樻病瑙e喅 鐧惧害HI鎴
  • 澶у鏁欐垜娓告垙鐜
    绛旓細LP鎵i櫎瑙勫垯:褰撳繁鏂瑰悜瀵规柟鏀诲嚮鎴栧鏂瑰悜宸辨柟鏀诲嚮鏃,琚嚮鐮寸殑鍗¤鏀捐繘澧撳湴閲屻傛敾鍑诲垎涓烘敾鍑绘敾鍑昏〃绀虹殑鍗″拰鏀诲嚮瀹堝琛ㄧず鐨勫崱銆傛敾鍑绘敾鍑昏〃绀虹殑鍗℃椂,鏀诲嚮鍔涗綆鐨勪竴鏂硅鍑荤牬,鍙屾柟鏀诲嚮鍔涘樊棰濆湪璐ユ柟鐨凩P涓墸闄,濡傛灉鏀诲嚮鍔涚浉绛,鍒欏弻鏂归兘琚嚮鐮,浣哃P涓嶆墸;鏀诲嚮瀹堝琛ㄧず鐨勫崱鏃,濡傛敾鍑绘柟鐨勬敾鍑诲姏鍦ㄥ畧澶囨柟鐨勫畧澶囧姏涔嬩笂鏃,...
  • 鏈潵鑿滈笩闂釜闂銆傚湪c#涓垜涓涓被鍐欐瀯閫犲嚱鏁板拰鏂规硶,鎴戝湪Main鍑芥暟...
    绛旓細this.width = width;} public double getWidth(){ return width;} public void setHeight(double height){ this.height = height;} public double getHeight(){ return height;} public void setLength(double length){ this.length = length;} public double getLength(){ return length;} 鍦mai...
  • 銆50鍒嗐慶++缂栫▼,楂樻墜杩
    绛旓細锛堢浜屾琛ュ厖锛夋垜绗簩娆″鏌ョ殑鏃跺欏彂鐜帮紝浣犵殑璇诲叆杩樻槸鏈変竴瀹氱殑闂鐨勶紝鎴戞妸瀹冩敼鎴愬姝わ細include <iostream> include <fstream> include <cstring> //涓轰簡姹傚瓧绗︿覆鐨勯暱搴 using namespace std;int main(){ ofstream output;output.open("output.txt"); //鏂板缓涓涓猳utput.txt char a[50],b[50];...
  • 璋佸憡璇夋垜娓告垙鐜嬬焊鐗岀殑鐜╂硶!
    绛旓細LP鎵i櫎瑙勫垯:褰撳繁鏂瑰悜瀵规柟鏀诲嚮鎴栧鏂瑰悜宸辨柟鏀诲嚮鏃,琚嚮鐮寸殑鍗¤鏀捐繘澧撳湴閲屻傛敾鍑诲垎涓烘敾鍑绘敾鍑昏〃绀虹殑鍗″拰鏀诲嚮瀹堝琛ㄧず鐨勫崱銆傛敾鍑绘敾鍑昏〃绀虹殑鍗℃椂,鏀诲嚮鍔涗綆...鍥犱负鍙嶈浆鍙敜涔熷睘浜庢敼鍙樿〃绀哄舰寮,鍦Main Phase(1)鍒氬彫鍞や笂鍦虹殑鎬墿鍗′笉鍙互鍦ㄥ悓涓鍥炲悎鐨凪ain Phase(2)鏀瑰彉琛ㄧず褰㈠紡,涔熷氨鏄笉鑳藉弽杞彫鍞ゃ傝繕鏈変竴涓壒娈婄殑...
  • Java 鎴戝缓鐨勪竴涓猵aint鏂规硶鍦main鏂规硶閲屾病璋冪敤,涓轰粈涔堣繕浼氭墽琛屽畠?_鐧惧害...
    绛旓細paint 鏄彲瑙嗙粍浠剁殑涓涓簨浠讹紝灏辨槸鍦ㄩ渶瑕佸埛鏂扮殑鏃跺欙紝JAVA鑷姩璋冪敤鐨
  • 扩展阅读:被主人焯坏的小狗 ... 主人好几天没打我了 ... 女生让男生叫爸爸怎么还击 ... 主人的命令by ... 我叫mt平民最强橙卡 ... 麻烦你不要过来 有系统 ... 老手s会给新手m下什么任务 ... 我管你叫哥你管我叫爸的梗 ... 男友让我叫他爸爸怎么回答 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网