码迷,mamicode.com
首页 > 其他好文 > 详细

(四).方法和参数

时间:2020-05-13 21:55:16      阅读:65      评论:0      收藏:0      [点我收藏+]

标签:完成   params   count   表达   形式   directory   传递   文件的   test   

方法和参数

System . Console . Write ("name")
命名空间 类 方法 参数

  1. 静态方法里只能调用静态方法。而动态方法里既可以调用静态方法,也可以调用动态方法。
namespace ConsoleApplication1
{
        class Program
        {
        static string TestFunc()
        {
            return "123";
        }
        static void Main(string[] args)
        {
            TestFunc(); //静态方法里只能调用静态方法。
            //而动态方法里既可以调用静态方法,也可以调用动态方法。
            Console.WriteLine(TestFunc());
            ConsoleApplication2.Class1.Func();
            System.Console.ReadLine();
        }
    }
}
  1. 值传递
    当函数被调用的时候,形参被创建,调用时带的参数被拷贝到刚创建好的形参,函数结束时,形参被摧毁。由于是参数的一个副本被传递到被调用的函数。所以,原始的参数不会被函数修改。
    值传递的优点: 通过值来传递的参数可以是数字,变量,表达式。参数的值不会被“被调用的函数”修改。
    值传递的缺点: 当函数被多次调用,值传递结构体和类会带来性能上的损害(耗时),给调用者返回值只能通过被调用函数的返回值。
static void Swap(int a, int b)
{
    int t;
    t = a; a = b; b = t;
}
static void Main(string[] args)
{
    int a = 1;
    int b = 2;
    Swap(a, b);
    Console.WriteLine("a={0} b={1}", a, b);
    Console.ReadLine();
}
//输出结果还是 a=1 b=2 , 没有变化。
  1. ref 传引用
static void Swap(ref int a, ref int b)
{
    int t;
    t = a; a = b; b = t;
}
static void Main(string[] args)
{
    int a = 1;
    int b = 2;
    Swap(ref a, ref b);
    Console.WriteLine("a={0} b={1}", a, b);
    Console.ReadLine();
}

特别注意:string虽然是引用类型,但是把它看成是char的数组,要共享修改也要加ref.
List是引用类型,共享修改,加ref和不加ref一样。

C#有两种类型,值类型和引用类型。引用类型:类似指针。
值类型:包括int, double, bool, char

ref和out的区别:

  1. 使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化。
  2. 使用ref和out时,在方法的参数和执行方法时,都要加Ref或Out关键字。以满足匹配。
  3. out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。

重载:
方法名相同, 但参数必须不同.

泛型:
通俗点叫模板 , 例如下面的

static void Swap<T>(ref T a, ref T b)
{
	T t;
	t = a; a =b; b =c;
}

累加:
理解为可变参数, 数组型参数, params: parameters参数
形式为: 方法修饰符 返回类型 方法名(params 类型[] 变量名)

static int Sum(params int[] nums)
{
	return nums.Sum();
}

递归:
自己调用自己, 必须要有约束条件

文件和目录:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
using System.IO;

namespace Demo1
{
    class Program
    {
        
        static long FileOrDirCount(string path)
        {
        long count = 0;

        try
        {
            //统计文件的个数
            var files = Directory.GetFiles(path);
            count += files.Length;

            //统计目录的个数
            var dirs = Directory.GetDirectories(path);
			count += dirs.Length;
            foreach (var dir in dirs)
            {
                count += FileOrDirCount(dir);
            }
        }
        catch (UnauthorizedAccessException ex)
        {
            Console.WriteLine(ex.Message);
            //throw;//抛出异常,需要被catch接住
        }

        return count;
        }

        static void Main(string[] args)
        {
            Console.WriteLine(FileOrDirCount("F:\\"));

            Console.ReadLine();
        }
  
    }
}

错误和异常:
try catch抛出异常

static void Main(string[] args)
{
    try
    {
        throw new Exception();
    }
    catch (exception)
    {}
    
    Console.WriteLine(123);
    Console.ReadLine();
}

(四).方法和参数

标签:完成   params   count   表达   形式   directory   传递   文件的   test   

原文地址:https://www.cnblogs.com/jiutianzhiyu/p/12885049.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!