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没有变;但是改变的引用的对象中的数据

原文地址:https://www.cnblogs.com/bigbosscyb/p/13715765.html