无法使用引用初始化变量值

问题描述 投票:-1回答:1

我正在尝试将refrance保存到存储位置。根据我受限的C#语言,它表示一个指针。当我尝试这样做时,出现多个错误。就像我提到的C#新手一样。帮助很重要。显然,代码位于名称空间和内容中

unsafe internal static class GooseAngerVars
{
   public static float DropDistanceVar = 40f;
   fixed (public static float* DropDistancePoint = &DropDistanceVar);
}
unsafe private struct Task_NabMouse
{
   public static float* MouseDropDistance = GooseAngerVars.DropDistancePoint;
}

如果我应该使用ref,则示例很好,因此我以后不会在Google上使用它]

c#
1个回答
0
投票

为了摆脱您的C ++思想过程并像C#程序员一样开始思考,您需要了解类型系统。

在C ++中,structclass几乎是同义词。它们在C#中非常不同。 struct定义了值类型,而class定义了引用类型。两者之间最大的区别是分配的含义。进行值类型分配时,将复制值。在引用类型分配期间,将复制对现有对象的引用(或复制null)。

[注意,许多“内置”类型(如数字类型,int double等)都是隐藏的结构(查找System.Int32)。

因此,假设Point类型是值类型,在...中>

var p1 = new Point (3, 4);
var p1 = p1;
p1.X =42;

创建一个新的Point对象,并将其值复制到p1。然后将该相同的值复制到p2。最后,Xp1属性设置为42。但是,由于p1p2各自具有不同的值,因此p2.X仍为3。

现在,假设有一个名为CPoint的类(因此它是引用类型),并且我们几乎有相同的代码。

var p1 = new CPoint (3, 4);
var p1 = p1;
p1.X =42;

在这里,p1是对新创建的CPoint对象的引用。分配会将引用复制到p2。此时,两个变量都将(point

)引用到同一对象(在托管堆上创建)。因此,当执行p1.X时,对象p1指向的对象将被突变,并且该突变也可以通过p2变量看到。

作为C ++程序员,应该看起来很熟悉(所缺少的只是*)。当然,由于.NET是垃圾回收/托管的,因此您不必担心谁owns

对象以及如何将创建的delete移到CPoint

如果要保留对浮点数的引用,请将其包装在一个类中,就可以忽略指针和unsafe

© www.soinside.com 2019 - 2024. All rights reserved.