C#学习简述_ref/out/可变参数/递归

本文深入探讨C#中ref与out参数的区别,解析可变参数params的使用场景,展示递归与异常处理的应用,以及get与set在属性封装上的作用。同时,介绍了类的初始化构造函数与匿名函数的运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、ref&out
共同点:两者都是对基本类型(int、bool、float、double···等)以及string的值进行修改。
不同点:ref是对有值参数(有初始化的参数)经行修改,out是对无值参数(没有经行初始化的参数)修改。

二、可变参数params

	static int Sum(int nul,params int[] nums)
    {
        return nums.Sum();
    }
    static void Main(string[] args)
    {
        Console.WriteLine(Sum(1, 2, 3, 4));
	}

必须为参数最后一位

三、递归&抛出异常

    static void Main(string[] args)
    {
        for (int i = 1; i <= 10; i++)
        {
            Console.WriteLine(Fib(i));
        }
        
         Console.WriteLine(FileOrDirCount("D:/"));
    }
    
	//斐波那契额数列 递归演示
    static long Fib(long n)
    {
        if (n == 1 || n == 2) return 1;
        return Fib(n - 1) + Fib(n - 2);
    }
 
    //用递归查询文件数量
    static long FileOrDirCount(string path)
    {
        long count = 0;
        //处理异常 可能会遇到无法访问的文件夹
        try
        {
            //统计file的个数
            var files = Directory.GetFiles(path);
            count += files.Length;
            //统计directory的个数
            var dirs = Directory.GetDirectories(path);
            foreach (var item in dirs)
            {
                count += FileOrDirCount(item);
            }
        }
        catch (Exception)
        {

            //throw;//交给外部方法处理
        }
        return count;
    }

四、get&set

//两种方式
//1
	public string Name { get; set; }
//2
    private string _name ;
    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }
    
   //有两个类person:
    public class person
    {
      public string name;
    }
    public class person
    {
      public string Name{set;get;}
    }

简单说下区别吧:当实例化第一个“person”这个类时,系统在分配内存空间时对name属性直接分配内存,之后对name属性的操作也是直接操作内存中name属性所在的这个块;而当实例化第二个“人”类型时,系统会先分配一个叫name的private私有的内存空间(此处的name对于类的内部使用,Name对于外部操作使用,要有所区分),之后的读与写的操作都是通过Name这个public的类似于指针的东西来关联name进行,以此达到封装的目的,并且通过get和set关键字也可以控制可读还是可写。建议用后者
https://www.cnblogs.com/liuyaozhi/p/4920275.html

五、初始化&匿名函数

//类初始化 构造函数
class Test {
    public Test()//普通构造
    {
        Name = "AK";
    }
    public Test(string _name) : this()//继承其他构造的构造函数
    {
        Name += _name;
    }
    public string Name { get; set; }
}
  class Program
{
    static void Main(string[] args)
    {
    	Test t = new Test("47");//类在实例化的时候进行对类的初始化
        Test test1 = new Test() { Name = "xx" };//对象初始化
        var man = new { Name = "xx", Age = 20 };//匿名函数 适用短期使用的类型
     }
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值