Unity 之 参数类型之值类型参数的用法

在这里插入图片描述

当谈论值类型参数时,我们可以从基本数据类型和结构体两个方面详细解释。值类型参数指的是以值的形式传递给函数或方法的数据,而不是引用。

基本数据类型

基本数据类型的值类型参数:

在C#中,基本数据类型是内置的数据类型,例如整数、浮点数、字符等。这些数据类型是值类型,它们在传递给函数时会以值的方式进行复制。这意味着函数内部对参数的修改不会影响函数外部的原始值。

示例:

void ModifyInt(int x)
{
    
    
    x = 20; // 修改函数内的副本
}

int number = 10;
ModifyInt(number);
Console.WriteLine(number); // 输出:10,因为函数内的修改不影响原始值

结构体

结构体的值类型参数:

结构体是用户定义的值类型,它可以包含多个字段。当将结构体作为参数传递给函数时,会将整个结构体的副本传递给函数。这意味着函数内部的操作不会影响原始结构体实例。

示例:

struct Point
{
    
    
    public int X;
    public int Y;
}

void ModifyPoint(Point p)
{
    
    
    p.X = 20; // 修改函数内的副本
}

Point point = new Point {
    
     X = 10, Y = 15 };
ModifyPoint(point);
Console.WriteLine(point.X); // 输出:10,因为函数内的修改不影响原始结构体实例

结构体的进一步补充

在 C# 中,创建结构体的实例时只需要使用 new 关键字,而不需要使用 new 来赋值已有的结构体实例。这与引用类型(例如类)不同,引用类型使用 new 关键字来创建实例时,你可以使用 = 运算符将一个实例赋值给另一个实例,从而使两个变量共享同一个实例。

但是,对于结构体,使用 = 运算符实际上会复制结构体的值,而不是共享同一个实例。所以在大多数情况下,你只需要使用 new 关键字来创建一个新的结构体实例,而不需要将一个结构体实例赋值给另一个实例。

下面是一个简单的示例,演示了如何使用 new 关键字创建结构体的实例:

public struct Point
{
    
    
    public int X;
    public int Y;

    public Point(int x, int y)
    {
    
    
        X = x;
        Y = y;
    }
}

class Program
{
    
    
    static void Main(string[] args)
    {
    
    
        Point point1 = new Point(10, 20); // 创建并初始化结构体实例
        Point point2 = new Point(30, 40); // 创建并初始化另一个结构体实例

        Console.WriteLine($"point1: X = {
      
      point1.X}, Y = {
      
      point1.Y}"); // 输出:point1: X = 10, Y = 20
        Console.WriteLine($"point2: X = {
      
      point2.X}, Y = {
      
      point2.Y}"); // 输出:point2: X = 30, Y = 40
    }
}

在上面的示例中,我们分别使用 new Point(10, 20)new Point(30, 40) 来创建了两个不同的 Point 结构体的实例。

总结:

值类型参数在函数内部操作时,只会影响传递给函数的副本,不会影响原始值或实例。这适用于基本数据类型和结构体,无论传递的是整数、浮点数,还是自定义的结构体,函数内部对值类型参数的修改都不会传递到函数外部。这与引用类型(如类)不同,引用类型参数传递的是引用,函数内部对参数的修改会影响原始对象。

猜你喜欢

转载自blog.csdn.net/weixin_74850661/article/details/132597517