C#中Main()和四种参数类型

1. Main()
Main方法是 C# 控制台应用程序或窗口应用程序的入口点。 (库和服务不要求将 Main 方法作为入口点。) 应用程序启动时,Main 方法是第一个调用的方法。  C# 程序中只能有一个入口点。 如果您有多个类都包含 Main 方法,则必须使用 /main 编译器选项编译您的程序,以指定用作入口点的 Main 方法。
    static class Program 

    { 

        /// <summary> 

        /// The main entry point for the application. 

        /// </summary> 

        [STAThread] //[STAThread] 单线程;[MTAThread] 多线程;[FreeThread] 自由线程 

        static void Main() 

        { 

            bool runone; 

            System.Threading.Mutex run = new System.Threading.Mutex(true, "jiaao_test", out runone); 

            /*Mutex (Boolean, String, Boolean): 使用一个指示调用线程是否应拥有互斥体的初始所属权的布尔   值、一个作为互斥体名称的字符串,以及一个在方法返回时指示调用线程是否被授予互斥体的初始所属权的布尔值。 

             * / 

            /*System.Threading.Mutex :当两个或更多线程需要同时访问一个共享资源时,系统需要使用同步机制来确保一次只有一个线程使用该资源。 

             * Mutex 是同步基元,它只向一个线程授予对共享资源的独占访问权。 

             * 如果一个线程获取了互斥体,则要获取该互斥体的第二个线程将被挂起,直到第一个线程释放该互斥体。 

             */ 

            if (runone) 

            { 

                
                run.ReleaseMutex();//.WaitOne 方法请求互斥体的所属权 
                                   //.ReleaseMutex 方法同样多的次数以释放互斥体的所属权 
                Application.EnableVisualStyles();//. VisualStyleState:启用应用程序的可视样式。 
                Application.SetCompatibleTextRenderingDefault(false); 
                /*.SetCompatibleTextRenderingDefault(Boolean):将某些控件上定义的 UseCompatibleTextRendering 属性设置为应用程序范围内的默认值。 
                 */ 

                try 
                { 
                    Application.Run(new MainForm());//. Run():在没有窗体的情况下,在当前线程上开始运行标准应用程序消息循环。 
                } 
                catch (System.Exception ex) 
                { 
                    MessageBox.Show("Application.Run(new MainForm())未完成" + ex.Message); 
                } 
            } 
            else 
            { 
                MessageBox.Show("已经运行了一个实例了。"); 
            } 
             
        } 
    }

函数调用参数传入与传出,函数返回值。

2.传值参数
参数默认是传值的,变量的栈数据会完整地复制到目标参数中。原调用函数中的实参只是将变量的的值复制了一份给方法,实参的数值是不会改变的。调用栈在一次的末尾“展开”的时候,当初复制的那个副本会被丢弃。
3.传引用参数(ref)
以传引用的方式传递传递变量,在参数前加ref关键字使参数以传引用的方式进行传递,使得被调用的方法可以用新值来更新原始调用者的变量。调用者显示地制定目标方法可以对它接收的任何ref参数进行重新赋值,除此之外,调用者应该对传引用的变量进行初始化,因为目标方法可以直接从ref参数读取数据而不先对它们进行赋值。
class Program
{
   static void Main()
   {
    string first="first";
    string second="second";
    Swap(ref first,ref second);
   }
   
   static void Swap(ref string first,ref string second)
   {
     string temp=first;
     first=second;
     second=temp;
   }
}
4.输出参数(out)
        将一个参数单向传入一个方法(传值),或者将同时将参数输入和传出一个方法(传引用)之外,还可以将数据从一个方法内部单向传出方法。为此,代码需要使用关键字out来修饰参数类型。只需要事先声明变量而且可以不对其初始化,函数调用过后此变量自动被赋新值。
 int lengt; //数据包长度,用于验证数据包的完整性
 int cmd; //数据包命令类型 

if (read.ReadInt32(out lengt) && read.Length == lengt && read.ReadInt32(out cmd))
 {  
switch (cmd)  
 {
   case 100:
    {
       object x;
        if (read.ReadObject(out x)) //如果数据包命令是 100那么 可以尝试读取一个对象
         {
              Console.WriteLine(x.GetType().ToString());
          }
     }
       break;
}
  }
5.参数数组(params)
        C#提供了一个特殊的关键字(params),它允许在调用一个方法时提供数量可以变的参数,而不是由方法事先固定好参数的数量。
       为了具有这个功能,需要满足两点条件。第一,在方法声明的最后一个参数之前,添加一耳光params关键字;第二,在最后一个参数声明为一个数组。第三,每个方法只能最后参数定义成参数数组,所以每个方法只能有一个参数数组。第四,参数数组是可以定义为0个元素。第五, 像这样的参数数组声明之后,我们将每个参数作为参数数组的一个成员来访问,
class pathEx
{
   static void Main()
   {
     fullname=combine(Directory.GetCurentDirectory(),"bin","config");
   }
   
   static string combine(params string[] paths)
   {
          string result=string.Empty;
          foreach(string path in paths)
          {
            result=System.IO.Path.Combine(result,path);
          }
          return result;
   }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值