我正在尝试将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 ++思想过程并像C#程序员一样开始思考,您需要了解类型系统。
在C ++中,struct
和class
几乎是同义词。它们在C#中非常不同。 struct
定义了值类型,而class
定义了引用类型。两者之间最大的区别是分配的含义。进行值类型分配时,将复制值。在引用类型分配期间,将复制对现有对象的引用(或复制null)。
[注意,许多“内置”类型(如数字类型,int
double
等)都是隐藏的结构(查找System.Int32
)。
因此,假设Point
类型是值类型,在...中>
var p1 = new Point (3, 4); var p1 = p1; p1.X =42;
创建一个新的Point对象,并将其值复制到
p1
。然后将该相同的值复制到p2
。最后,X
的p1
属性设置为42。但是,由于p1
和p2
各自具有不同的值,因此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