C#中的ref参数

时间:2011-05-15 08:29:47

标签: c# .net

首先,我是C#编程新手。

我读了

的参数
ImageObj.getBounds(ref GraphicsUnit unit);

当我尝试这个时,

ImageObj.getBounds(ref GraphicsUnit.Pixel);

我仍然有错误。但这似乎完全正常。

GraphicsUnit u = GraphicsUnit.Pixel;
ImageObj.getBounds(ref u);

两者有什么区别,第一个错误是怎么回事?谢谢。

3 个答案:

答案 0 :(得分:13)

GraphicsUnit.Pixel是一个属性,您无法在C#中传递带有ref / out参数的属性。这是因为ref / out就像指向其他语言的指针,但属性不是变量 - 它是一个2方法:getter和setter,所以,你不能将指针传递给指向值的指针因为你没有重视自己。

添加了: 好的,GraphicsUnit.Pixel实际上是enum成员 - 您也无法通过ref / out参数传递它,因为它是常量。

答案 1 :(得分:5)

GraphicsUnit.Pixel是一个常量,因为它是枚举的成员。因此,它不能传递给需要引用GraphicsUnit的函数 - getBounds可能会尝试修改该值,但这显然无法工作。

答案 2 :(得分:4)

ref关键字必须引用变量。属性不是变量。它是一种特殊类型的成员,它包含一个后备字段( 是一个可以与ref一起使用的变量)。另外,ref标记要由方法修改的变量;这意味着如果它是某个东西的引用,引用被更改,而不是被引用的对象

第二个代码段有效,因为您将GraphicsUnit.Pixel的内容分配给要由该方法操纵的局部变量。

相关问题