首先,我是一名新手C#编程。
我阅读了参数的
ImageObj.getBounds(ref GraphicsUnit unit);
当我尝试这个时,
ImageObj.getBounds(ref GraphicsUnit.Pixel);
我仍然看到了错误提示,但是这个方法似乎完美地执行了。
GraphicsUnit u = GraphicsUnit.Pixel;
ImageObj.getBounds(ref u);
什么是两者之间的区别,第一个有什么问题?谢谢。
GraphicsUnit.Pixel
是一个属性,你不能在C#中使用ref
/out
参数传递属性。这是因为ref
/out
类似于其他语言中的指向指针,但属性不是变量 - 它有两个方法:获取器和设置器,所以你不能传递指向值的指针,因为你没有值本身。
添加说明:
好的,GraphicsUnit.Pixel
实际上是枚举成员 - 你也不能使用ref
/out
参数传递它,因为它是一个常量。
GraphicsUnit.Pixel
是一个常量,因为它是枚举的成员。因此,它不能传递给期望引用GraphicsUnit的函数 - getBounds可能尝试修改该值,这显然行不通。
ref
关键字必须引用一个变量。属性不是变量,它是一种特殊的成员,包装了一个后备字段(后备字段是可以与 ref
一起使用的变量)。另外,ref
标记一个变量将被方法修改;这意味着如果它是指向某个东西的引用,引用会被更改,而不是被引用的对象。GraphicsUnit.Pixel
的内容分配给一个本地变量,以便由方法进行操作。