.NET基础-6

数组:为了创建多个相同类型的变量

ps:结构是为了创建多个不同类型的变量

数组一旦被创建,则该数组的长度不能被修改

数组的声明:

int[] nums=new int[4];//声明一个长度为4的空数组

int[] nums=new int[4]{1,2,3,4};//声明一个长度为4的数组,并为其赋值

int[] nums =new int[]{1,2,3,4};//声明一个数组,并为其赋值,这时数组的长度有数组的元素个数决定

int[] nums ={1,2,3,4};//声明一个数组,此时数组的类型由初始化决定,长度由数组的元素个数决定

数组首位交换

            int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

            //交换数组
            string error = "";
            for (int i = 0; i < nums.Length; i++)
            {
                Console.Write("{0}\t", nums[i]);
            }

            Console.WriteLine();

            GetChangeArry(nums,out error );

            for (int i = 0; i < nums.Length; i++)
            {
                Console.Write("{0}\t", nums[i]);
            }

            Console.ReadKey();


        private static void GetChangeArry(int[] nums, out string error)
        {
            error = "";
            if (nums == null || nums.Length <= 0)
            {
                error = "错误";
            }
            int coun = nums.Length;
            int temp = 0;
            for (int i = 0; i <= coun / 2; i++)
            {
                temp = nums[i];
                nums[i] = nums[coun - 1];
                nums[coun - 1] = temp;
                coun--;
            }
        }


冒泡排序:升序(大的在后面,像烧开水)/降序(打的在前面)

            //先输出一遍

            int[] nums = { 6, 9, 4, 3, 5, 2, 8, 1, 0, 7 };
            for (int i = 0; i < nums.Length; i++)
            {
                Console.Write(nums[i]);
            }
            Console.WriteLine();

            //升序
            for (int i = 0; i < nums.Length - 1; i++)
            {
                for (int j = 0; j < nums.Length - 1 - i; j++)
                {
                    if (nums[j] > nums[j + 1])
                    {
                        int temp = nums[j];
                        nums[j] = nums[j + 1];
                        nums[j + 1] = temp;
                    }
                }
            }
            Console.WriteLine("升序:");
            for (int i = 0; i < nums.Length; i++)
            {
                Console.Write(nums[i]);
            }
            Console.WriteLine();

            //降序
            for (int i = 0; i < nums.Length - 1; i++)
            {
                for (int j = 0; j < nums.Length - 1 - i; j++)
                {
                    if (nums[j] < nums[j + 1])
                    {
                        int temp = nums[j];
                        nums[j] = nums[j + 1];
                        nums[j + 1] = temp;
                    }
                }
            }
            Console.WriteLine("降序:");
            for (int i = 0; i < nums.Length; i++)
            {
                Console.Write(nums[i]);
            }

            Console.ReadKey();

Array有两个方法

Array.Sort(nums);//升序排列

Array.Reverse(nums);//反转

Array没有降序排列的方式,如果要对数组进行降序排列可以先升序排列,在对数组进行反转


方法(函数)

形参和实参:

形参:形式上的参数,也会在内存中开辟空间,但是形参变量只有在被调用的时候才会分配内存空间,而且一旦调用结束所分配的内存空间就会被释放,所以形参只能在函数内部有效

实参:调用函数时传递的参数,也会在内存中开辟空间,实参可以是变量,常量,表达式,函数等.但是不论是什么,在调用函数的时候他们都必须有确定的值,以便把这些值传递给形参

形参和实参的命名可以不同,但是数据类型,数量,顺序必须一致,否则会出现编译错误

在一般传值调用的时候只能把实参传递给形参,而不能把形参的值反过来传递给实参,因此在调用的过程中,如果为值类型形参的值发生改变实参的值不会改变,引用类型应为传递的是实参的引用地址,所以任何发生在形参上面的变化也会反应在实参上


return:

返回想要的结果

立即结束当前方法


调用和被调用:

如果在Main()函数中调用Test()函数,

则吧Main()函数称为调用者,Test()函数称为被调用者


方法(函数)的书写规范:

方法的功能一定要单一,一个方法只完成一个功能

尽量使用接口,然后使用类去实现接口,提高代码灵活性

每一行的代码不要过长(控制在80个以内)

尽量书写注释,关键代码和逻辑复杂的代码必须有注释

局部变量尽量在最接近使用它的地方声明

尽量不要使用goto系列语句

尽量控制方法的入参数量只在5个以内

尽量不要书写代码量过大的try-catch模块

尽量不要在同一个文件中书写多个类

尽量不要使用this关键字引用

生成或构建一个长的字符串的时候使用StringBuilder类型,不要使用string类型

switch语句要有default语句来处理特殊情况

对于if语句,使用{}把代码块括起来(就算只有一行代码也尽量加上)


out和ref:

ref和out都是按地址传递,使用后都将改变原来参数的数值

因为是按地址传递,可以解决方法(函数)只能有一个返回值得问题

方法定义和使用的时候都要显示的使用ref/out关键字来修饰

ref:被ref关键字修饰的参数,在调用函数之前必须赋初值,否则会编译出错,在函数内可以不必赋值

out:被out关键字修饰的参数,在被调用的之前可以不比赋值,但是在函数中必须被赋值,否则会编译出错

out方法侧重函数中的返回值(在函数中必须要赋值)

ref侧重于把调用函数之前的值传入函数并且参与运算操作(调用函数之前必须赋值)

        public void Show(ref string mm)
        {
            Console.WriteLine(1);
        }
        public void Show(out string mm)
        {
            Console.WriteLine(2);

        }

上面两个方法这样定义是会报错:无法重新定位重载方法'Show',应为他与其他方法仅在ref和out上有差别

尽管ref和out在运行时的处理方式不同,但是他们在编译的时候处理方式相同,所以无法重载这两个方法,从编译的角度看他们是相同的一个方法(函数)











猜你喜欢

转载自blog.csdn.net/m0_37532448/article/details/80214181