C#中的ref参数

4

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

我阅读了参数的

ImageObj.getBounds(ref GraphicsUnit unit);

当我尝试这个时,

ImageObj.getBounds(ref GraphicsUnit.Pixel);

我仍然看到了错误提示,但是这个方法似乎完美地执行了。

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

什么是两者之间的区别,第一个有什么问题?谢谢。
3个回答

13

GraphicsUnit.Pixel是一个属性,你不能在C#中使用ref/out参数传递属性。这是因为ref/out类似于其他语言中的指向指针,但属性不是变量 - 它有两个方法:获取器和设置器,所以你不能传递指向值的指针,因为你没有值本身。

添加说明: 好的,GraphicsUnit.Pixel实际上是枚举成员 - 你也不能使用ref/out参数传递它,因为它是一个常量。


主啊,我脑子一片空白...感谢您提供简明扼要的解释! - Rikon

5

GraphicsUnit.Pixel是一个常量,因为它是枚举的成员。因此,它不能传递给期望引用GraphicsUnit的函数 - getBounds可能尝试修改该值,这显然行不通。


哦,Java里不可能这样做,对吧?它难道不总是传值吗? - mihsathe
不,Java不允许通过引用传递简单类型。 - Will A

4
ref 关键字必须引用一个变量。属性不是变量,它是一种特殊的成员,包装了一个后备字段(后备字段是可以与 ref 一起使用的变量)。另外,ref 标记一个变量将被方法修改;这意味着如果它是指向某个东西的引用,引用会被更改,而不是被引用的对象
第二个代码片段能够工作是因为你将 GraphicsUnit.Pixel 的内容分配给一个本地变量,以便由方法进行操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接