zoukankan      html  css  js  c++  java
  • C#函数(二)

    1.一般函数

    一般函数的调用,c#里面函数调用前不用先申明,或者被调用函数要写在调用函数的前面,c#里面没有这些,只要有这么一个函数,不管你现在前还是后都可以调用,而且没有申明函数这回事。

    static void Main(string[] args)

            {

    int[] i = { 1,2,3,4};

                int j = Max(i);//调用他下面的函数

                Console.WriteLine(j);

                Console.WriteLine(Ishome());

    static int Max(int[] max)

              {

                int i;

                for (i = 0; i < 3;i++ )

                {

                    if (max[0] < max[i + 1])

                    {

                       int y;

                        y = max[i + 1];

                        max[i+1]=max[0];

                        max[0] = y;

                    }              

                }

                return max[0];

            }

    }

    2.函数可变参数

    函数要可变参数,只需要在参数前面加params即可

    static void Main(string[] args)

            {

      string[] s = { "bao","wen","wei"};

               Canchange( "bao","wen","wei");//第二种方法中就是可变参数,可以看到Canchange里面只有一个参数,但我这里写了三个参数,说明他的参数是可变的。

                Canchange1("baowenwei", "tianxia","wen", "wei","tainnddddd");

                Console.ReadKey();

      static void Canchange(params string[] vales)// 参数可变,但参数必须是数组;可变参数的原理就是将多个参数当成一个数组来处理;

            {

                foreach (string s in vales)

                {

                    Console.WriteLine(s);

                }

            }

            static void Canchange1(string name, params string[] vales)// 定参数和不定参数混用,但是可变参数必须写在最后面;     

       {

                Console.WriteLine(name);

                foreach (string s in vales)

                {

                    Console.WriteLine(s);

                }

            }

    }

    3.函数的重载

    函数名相同,函数的参数不同或函数参数的类型不同,这样函数名被多次使用就是函数重载。

    static void Main(string[] args)

            {

                Chongzai();

                Chongzai(1);

                Chongzai("t");

                Chongzai("¨y",3);

                Console.ReadKey();

            }

            //----------重载与返回类型无关,只与参数个数、参数类型有关。

            static void Chongzai()

            {

                Console.WriteLine("重载");

            }

            static void Chongzai(int i)

            {

                Console.WriteLine("重载{0}",i);

            }

            static void Chongzai(string s)

            {

                Console.WriteLine("重载{0}",s);

            }

            static void Chongzai(string s, int i)

            {

                Console.WriteLine("重载{0},{1}",s,i);

            }

     

    4.refout貌似指针

    refout属于引用型,而不是普通的值传递。引用型就有点像c++里面的指针,引用不是普通的赋值,而是直接指向对象;

    static void Main(string[] args)

            {

                int age = 10;

                int age1=10;

                int age2;

     

                Intage(age);

                Intage1(ref age1);

                Intage2(out age2);

     

                Console.WriteLine(age);

                Console.WriteLine(age1);

                Console.WriteLine(age2);

    }

    //-----------------------------值传递

    static void Intage(int age1)//不能改变主函数里面的原值的,因为他相当于赋值了一个参数过来自加1,就如:age1=age=10age1++管你age什么事啊;所以打印age时他还是10

            {        {

                age1++;

            }

            //--------------------------ref改变外面变量

            static void Intage1(ref int age3)// 加了ref就不是简单的值传参数了,而是引用了主函数里面age1;而不是将age1的值赋值给age3age3=age1=10)。

            {

                int age1 = age3 + 1;// 这里是重新定义了一个age1和主函数里面的那个age1无关;

                age3++;//虽然这里写成了age3,但他仍然可以改变主函数里面的age1;因为他是引用了age1里面的内容;这里就好像cc++里面的指针,他指向的是age1里面的内容;

            }

    说明:10元钱放在一个盒子里面,先是age1拿到了,现在age110元钱了,然后age3通过age1也拿到了这个盒子,age3也有10元钱了,当age3将盒子里面的10元变成12元后,因为age1age3拿的是同一个盒子,所以当age1从盒子里面拿出钱来的时候当然是拿到12元了。

            //---------out为外面的变量赋值

            static void Intage2(out int age4)// 不要管这里的age4,主要的是看传进来的是谁?,显然是age2,那么age4赋值后将传回给age2;就好像age2=age4age4等于多少age2就等于多少。

            {

                age4 = 20;

                //age4++;//这是不可以的,就算age2先赋值了,也不可以,out是用来给外面的变量赋值的,就算外面已经赋值了,那么out就成了是第二次赋值,变量的值一般来说当然是第二次的值为准了。

            }

    说明:1.使用ref之前,参数必须先初始化ref主要是用来内部对外部的值进行改变;

          2. 使用out不需要先赋值,也可以先赋值(但通过out后,值将和out所给出的值一直)。out主要用来内部给外部赋值,还有个最主要的就是用来实现多个返回值;

    5.多个返回值(outTryParse

    string s = Console.ReadLine();

                int i;

                if (int.TryParse(s, out i))// TryParse将字符串转换为int型,但他是bool型,就是说他只能返回TRUEFALSE,就是说TryParses(字符串型)转换为iint型)如果转换成功那么就返回true,转换完后i还是i啊,我们并没有给i赋过值啊, 只是通过TryPares来转换(转换不一定就是赋值啊,要知道TryPares是返回bool型)这时就需要out来对他赋值了,out就是对外部变量赋值的。out先给i赋值(i=s),然后通过TryPares来转换,如果转换TryPares返回为true那么out赋值成功,如果TryPares返回false,那么out赋值失败(i=0);

    trypares必须和out合用。

                {

                    Console.WriteLine("你输入的值是数字字符{0}", i);

                }

                else

                {

                    Console.WriteLine("看看你是什么?{0}",i);//如果转换失败的话,i就为0

                }

    注:只有TryPares返回值为true时,out才会对变量赋值,如果TryPares返回为false那么out就不对变量赋值,变量自动为0

  • 相关阅读:
    python基础(一)
    python之使用__future__
    python中动态导入模块
    getResource()和getResourceAsStream以及路径问题
    〖转〗request.getparameter()和request.getAttribute()的区别
    IntelliJ IDEA 中module的dependencies是其它module时的注意事项
    IntelliJ IDEA 的Project structure说明
    c#中关于virtual,override和new的理解
    为什么在头文件中只能放声明不能放定义
    sql server 2008 中的架构(schame)理解
  • 原文地址:https://www.cnblogs.com/wenwei/p/2212356.html
Copyright © 2011-2022 走看看