• C#:方法参数之--值参数


    值参数:方法声明时,不带任何修饰符的形参,就被称为值参数。

    • 值参数(形参)本质上是一个局部变量,它的初始值来自方法调用时传递过来的实参
    • 值参数所在的方法被调用的时候,传递的实参必须能够隐式地转换成形参的类型
    • 值参数所在的方法被调用的时候,会将实参的值拷贝一份给形参(创建副本),这样方法调用前后,都不会对实参有影响

    值参数的类型为值类型

    static void Main(string[] args)
    {
        int x = 10;
        AddOne(x);
        Console.WriteLine(x);//10
        Console.ReadKey();
    }
    
    static void AddOne(int p)
    {
        p = p + 1;
        Console.WriteLine(p);//11
    }
    

    分析:p是值参数,调用p所在的方法时,实参的值被拷贝了一份给了形参p,所以操作p不会对x有任何影响
    值类型的值参数

    值参数的类型为引用类型

    • 在方法内部创建了新对象,赋值给形参
    class Program
    {
        static void Main(string[] args)
        {
            var stu = new Student() { Name = "xiaoming", Age = 18 };
            //对象的hashcode是唯一的 使用hashcode可以判断两个对象是否相等
            Console.WriteLine(stu.GetHashCode());//输出:46104728
            PrintInfo(stu);
            //方法调用后 实参stu的数据信息
            Console.WriteLine(stu.Name+"--"+stu.Age);//输出:xiaoming--18
            Console.Read();
        }
    
        static void PrintInfo(Student student)
        {
            student = new Student() { Name="jaychou",Age=33};
            Console.WriteLine(student.GetHashCode());//输出:12289376
            Console.WriteLine(student.Name + "--" + student.Age);//输出:jaychou--33
        }
    }
    
    class Student
    {
        public int Age { get; set; }
        public string Name { get; set; }
    }
    

    分析:值参数类型为引用类型时,实参在调用前和调用后没有发生变化
    引用类型的值参数

    • 在方法内部,只操作形参引用的对象,不创建新的对象
    class Program
    {
        static void Main(string[] args)
        {
            var stu = new Student() { Name = "xiaoming", Age = 18 };
            //对象的hashcode是唯一的 使用hashcode可以判断两个对象是否相等
            Console.WriteLine(stu.GetHashCode());//46104728
            PrintInfo(stu);
            //方法调用后 实参stu的数据信息
            Console.WriteLine(stu.Name+"--"+stu.Age);//jaychou--33
            Console.Read();
        }
    
        static void PrintInfo(Student student)
        {
            student.Name = "jaychou";
            student.Age = 33;
            Console.WriteLine(student.GetHashCode());//46104728
            Console.WriteLine(student.Name + "--" + student.Age);//jaychou--33
        }
    }
    
    class Student
    {
        public int Age { get; set; }
        public string Name { get; set; }
    }
    

    分析:从打印结果来看,调用前后实参引用的对象的hascode没有变;但是改变的引用的对象中的数据

  • 相关阅读:
    《动手学深度学习》系列笔记—— 1.3 多层感知机
    angular 9.1.0发布,下一个版本:angular10
    postgresql 两行数据时间之差
    abp zero bug
    docker nginx angular 刷新错误,404错误
    EF Core 新特性——Owned Entity Types
    identityServer4 中的概念(Scope,claim)
    程序员工作时间简单分析
    吐槽下阿里云栖大会购票系统
    打造适合你的ABP(1)---- 完善日志系统
  • 原文地址:https://www.cnblogs.com/bigbosscyb/p/13715765.html
Copyright © 2020-2023  润新知