首先,我是C#编程新手。
我读了
的参数ImageObj.getBounds(ref GraphicsUnit unit);
当我尝试这个时,
ImageObj.getBounds(ref GraphicsUnit.Pixel);
我仍然有错误。但这似乎完全正常。
GraphicsUnit u = GraphicsUnit.Pixel;
ImageObj.getBounds(ref u);
两者有什么区别,第一个错误是怎么回事?谢谢。
答案 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
的内容分配给要由该方法操纵的局部变量。