请考虑以下代码(我有意将 MyPoint编写为此示例的引用类型)
public class MyPoint
{
public int x;
public int y;
}
Run Code Online (Sandbox Code Playgroud)
它是普遍公认的(至少在C#中)当你通过引用传递时,该方法包含对被操作对象的引用,而当你通过值传递时,该方法复制被操纵的值,因此全局范围中的值是不受影响.
例:
void Replace<T>(T a, T b)
{
a = b;
}
int a = 1;
int b = 2;
Replace<int>(a, b);
// a and b remain unaffected in global scope since a and b are value types.
Run Code Online (Sandbox Code Playgroud)
这是我的问题; MyPoint是引用类型,所以我希望在相同的操作Point,以取代a与b在全球范围内.
例:
MyPoint a = new MyPoint { x = 1, y = 2 };
MyPoint b = new …Run Code Online (Sandbox Code Playgroud) c# value-type reference-type pass-by-reference pass-by-value
我读了什么是拳击和拆箱,有什么权衡?但无法理解一件事.假设我有一个班级:
class MyClass
{
public int Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想在我的方法中获得价值:
void MyFunc(MyClass cls)
{
int i = cls.Value;
}
Run Code Online (Sandbox Code Playgroud)
作为一个放在堆中的类,我猜那个值也放在堆中了吗?因此操作
int i = cls.Value;
Run Code Online (Sandbox Code Playgroud)
拆箱?或者它不是拆箱?
嗨,我正在尝试做两个对象的简单交换.我的代码是
void Main()
{
object First = 5;
object Second = 10;
Swap(First, Second);
//If I display results it displays as
//Value of First as 5 and Second as 10
}
private static void Swap(object First, object Second)
{
object temp = First;
First = Second;
Second = temp;
}
Run Code Online (Sandbox Code Playgroud)
由于对象是引用类型,因此应将其引用传递给方法,并且应该交换.为什么不发生?
在以下示例中,我对理解Java的"pass-by-value"操作有疑问:
public class Numbers {
static int[] s_ccc = {7};
static int[] t_ccc = {7};
public static void calculate(int[] b, int[] c) {
System.out.println("s_ccc[0] = " + s_ccc[0]); // 7
System.out.println("t_ccc[0] = " + t_ccc[0]); // 7
b[0] = b[0] + 9;
System.out.println("\nb[0] = " + b[0]); // 16
c = b;
System.out.println("c[0] = " + c[0] + "\n"); // 16
}
public static void main(String[] args) {
calculate(s_ccc, t_ccc);
System.out.println("s_ccc[0] = " + s_ccc[0]); // 16
System.out.println("t_ccc[0] = " …Run Code Online (Sandbox Code Playgroud) 如下代码:
Debug.LogWarning("updating scale fix, scalefactor: "+scaleFactor+" - Current scale is: "+cell.transform.localScale.x);
cell.transform.localScale.Set (scaleFactor,scaleFactor,scaleFactor);
Debug.LogWarning("Scale after fix: " + cell.transform.localScale.x);
Run Code Online (Sandbox Code Playgroud)
产生以下输出:
updating scale fix, scalefactor: 0.9 - Current scale is 0.8921105
UnityEngine.Debug:LogWarning(Object)
Scale after fix: 0.8921105
UnityEngine.Debug:LogWarning(Object)
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?我只是假设由于这些事情是紧接着发生的,因此应该更新规模。还是在框架完成之后发生?
任何帮助表示赞赏。