Tag: ref

使用ref节省内存传递引用类型吗?

在C#中,方法的参数可以是引用类型或值类型。 传递引用类型时,将传递引用的副本。 这样,如果在方法内部我们尝试将传递的引用重新分配给另一个对象实例,则在该方法之外,重新分配是不可见的。 为了使其工作,C#具有ref修饰符。 使用ref传递引用类型实际上使用原始引用而不是副本。 (如我错了请纠正我)。 在这种情况下,由于我们没有创建引用的副本,我们是否保存了任何内存? 如果广泛调用方法,这是否会提高应用程序的整体性能? 谢谢!

如何保存ref变量供以后使用?

所以这有效.. public MyClass(ref Apple apple) { apple = new Apple(“Macintosh”); // Works fine } 但有可能做这样的事情吗? private Apple myApple; public MyClass(ref Apple apple) { myApple = apple; } public void ModifyApple() { myApple = new Apple(“Macintosh”); // does not change the input variable like the first example did } 当ref变量被复制到成员变量myApple它似乎失去了它的’ref-ness’并且重新赋值它不再改变输入变量。 有没有解决的办法?

调用者的“out”关键字的目的是什么(在C#中)?

当C#函数具有输出参数时,您可以按如下方式清除: private void f(out OutputParameterClass outputParameter); 这表明在调用函数时不必初始化参数。 但是,在调用此函数时, 您必须重复out关键字 : f(out outputParameter); 我想知道这有什么好处。 为什么有必要重复部分function规范? 有人知道吗?

引用值类型的相等性

我做了一些ref关键字测试,有一个认为我无法理解: static void Test(ref int a, ref int b) { Console.WriteLine(Int32.ReferenceEquals(a,b)); } static void Main(string[] args) { int a = 4; Test(ref a, ref a); Console.ReadLine(); } 为什么此代码显示为False ? 我知道int是一个值类型,但在这里它应该传递对同一个对象的引用。

两个方法与ref对象par和没有?有什么区别?

我想知道以下方法在引用对象参数方面的区别是什么: public void DoSomething(object parameter){} 和 public void DoSomething(ref object parameter){} 如果我想更改object的引用而不是覆盖同一引用中的对象,我应该使用ref object parameter吗?

C#:如何将null传递给期望ref的函数?

我有以下function: public static extern uint FILES_GetMemoryMapping( [MarshalAs(UnmanagedType.LPStr)] string pPathFile, out ushort Size, [MarshalAs(UnmanagedType.LPStr)] string MapName, out ushort PacketSize, ref Mapping oMapping, out byte PagesPerSector); 我想这样称呼: FILES_GetMemoryMapping(MapFile, out size, MapName, out PacketSize, null, out PagePerSector); 不幸的是,我不能在需要类型ref Mapping的字段中传递null而且没有强制转换我已尝试修复此问题。 有什么建议?

“ref”关键字和引用类型

我的团队中的某个人偶然发现了引用类型上ref关键字的特殊用法 class A { /* … */ } class B { public void DoSomething(ref A myObject) { // … } } 是否有人理智会做这样的事情? 我在C#中找不到这个用途

获取对数组内部结构的引用

我想修改一个结构的字段,该结构在一个数组内,而不必设置整个结构。 在下面的示例中,我想在数组中设置元素543的一个字段。 我不想复制整个元素(因为复制MassiveStruct会损害性能)。 class P { struct S { public int a; public MassiveStruct b; } void f(ref S s) { sa = 3; } public static void Main() { S[] s = new S[1000]; f(ref s[543]); // Error: An object reference is required for the non-static field, method, or property } } 有没有办法在C#中做到这一点? 或者我总是要从数组中复制整个结构,修改副本,然后将修改后的副本放回到数组中。