C#学习笔记第一篇之由Main函数

第一篇之由Main函数联想开来

开篇

本系列是个人的一个学习C#的学习笔记,适合对象为:至少学习过C语言的,最好学习过C++和JAVA的,因为本事我也是搞C++,大学学的是JAVA,公司要用C#,所以会联系C/C++,JAVA的异同的来比较着学习,对于基本的C语法,如for循环了,switch判断了,等等,这些基本的语法就不一一概述了,单独会详细介绍一些与其他三种语言的异同来学习。
C#(读sharp),c++++的缩写,可以认为是c系列的升级版本,当然不完全是,下面的学习过程中会步步深入了解那些不一样的地方。
        C#是基于.net平台的,.net平台是什么?度娘吧,不是一句两句的问题,可以粗浅认识为.net相当于一个操作系统,c#是这个操作系统上面的一个应用程序,这个操作系统上面还有其他的应用程序如VB等,也可先简单的认为是JAVA的虚拟机。

第一个C#程序HelloWorld

using System;
namespace FirstTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("HelloWorld!");
            Console.ReadLine();
        }
    }
}
执行结果:

解释:
1.C#默认的访问权限是private类型,所以这个Main函数式private的,java中mian(m小写)函数是public的。
2.Main函数为什么是static的?
首先要知道,static函数是属于类的,不能通过类的实例化(程序员手工new一个对象),来调用,只能通过className.methodName()形式来调用。Main函数是操作系统运行这个程序的入口,操作系统要进入这个函数,通常应该是new一个对象,然后,通过对象来调用该函数,但是这个类(包含main方法的类)只是为了提供给操作系统来调用的接口用的。
      接着要明白static方法与非static方法的区别:
      static方法:只加载内存一次,一直到程序结束都存在在程序中,没有放在堆栈区,而是放在静态公共存储区域,它只属于类,而不属于对象。
     非static方法:需要多次加载到内存中,当调用的时候就将函数指针保存到运行堆栈中,函数结束或者垃圾回收的时候就会释放,需要多次加载,学过汇编的肯定知道我在说什么。
     一般static方法用于使用频率高的场合,而非static方法用于使用频率不高的场合(需要多次加载到内存,比较耗费时间)(注意这里是一般,没有说完全,譬如本处的特例就是Main函数就是仅仅加载到内存中一次。)
一句话概括就是,完全可以不声明为static的,但是就要要求操作系统去创建一个无意义的对象,来调用这个Main函数,并且调用完就会释放掉。(我的理解,可能操作系统的进程可能需要这个函数指针来标示该程序,Main函数就相当于该程序的主进程,它必须是一直存在内存中,如果它就析构掉了,可能其他函数的基地址就不存在了,那么找不到程序中的其他可执行的地址)
3.参数string[] args的含义是?

    这个参数是字符串数组,在Main函数中可以调用,所有关于数组的函数,来操作这个参数,这个参数值是来自于console的输入字符串,通常我们不需要从console传递参数,所以用的较少。
4.static在c/c++,java,c#的意义?
   c语言中:

  •   变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。 
  • 变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。 
  • Tips: 
  • A.若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度; 
  • B.若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度; 
  • C.设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题; 
  • D.如果我们需要一个可重入的函数,那么,我们一定要避免函数中使用static变量(这样的函数被称为:带“内部存储器”功能的的函数) 
  • E.函数中必须要使用static变量情况:比如当某函数的返回值为指针类型时,则必须是static的局部变量的地址作为返回值,若为auto类型,则返回为错指针。 
  • 函数前加static使得函数成为静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。 
  • 扩展分析:术语static有着不寻常的历史.起初,在C中引入关键字static是为了表示退出一个块后仍然存在的局部变量。随后,static 
  • 在C中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数。为了避免引入新的关键字,所以仍使用static关键字来表示这第二种含义。最后, 
  • C++重用了这个关键字,并赋予它与前面不同的第三种含义:表示属于一个类而不是属于此类的任何特定对象的变量和函数(与Java中此关键字的含义相 
  • 同)。 
  •  
5、static的用法?
1在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 
2 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。 
3在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。 
大多数应试者能正确回答第一部分,一部分能正确回答第二部分,同是很少的人能懂得第三部分。这是一个应试者的严重的缺点,因为他显然不懂得本地化数据和代码范围的好处和重要性
静态的用 类名直接调用 
非静态 实例化 以后才能调用

6,待解决问题,操作系统中管态到目态那个接口是怎么样的,这个能明白了,差不多就能从底层深入了解main函数的作用了?

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值