zoukankan      html  css  js  c++  java
  • 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、小程序自带的日志功能
    java判断List里面的值是否存在重复元素
    java给List<String>批量赋值方法
    (转)post请求携带cookie时配置跨域问题(withCredentials设置)
    redis远程连接不上,配置redis远程连接
    Velocity判断是否为空(Velocity基本语法)
    mysql设置权限,添加远程访问用户
    java 接收邮件时附件中文乱码问题
    JAVA AES加解密问题(解密时出错)
    om.baomidou.mybatisplus.core.exceptions.MybatisPlusException: 该模式不能应用于非数据库字段!
  • 原文地址:https://www.cnblogs.com/bigbosscyb/p/13715765.html
Copyright © 2011-2022 走看看