Tag: 传递参考

通过值或引用将对象作为参数传递给另一个类?

在C#中,我知道默认情况下,传递给函数的任何参数都是通过复制,即在函数内有参数的本地副本。 但是,当一个对象作为参数传递给另一个类时呢? 是否会通过引用或值传递以下方案: class MyClass { private Object localObj; public void SetObject(Object obj) { localObj = obj; } } void Main() { Object someTestObj = new Object(); someTestObj.name = “My Name”; MyClass cls = New MyClass(); cls.SetObject(someTesetObj); } 在这种情况下,类变量localObj是否与Main驱动程序类中创建的someTestObj具有相同的副本? 或者两个变量是否指向不同的对象实例?

使用“ref”关键字将List 作为参数传递给C#

朋友们! 所以我一直在写一个简单的程序。 基本上,我有一个类(3个字符串,1个int,一些方法)。 我正在从文本文件初始化此类的对象的值。 我正在使用List。 问题是初始化是一个单独的function。 我在这个函数中声明并初始化了List BOTH。 但是,我可能在其他function中需要它,包括“Program.Main”。 我应该制作一个“全球”课程并制作一个公开的List 吗? 我决定立即在我的Program.Main函数中声明它。 但是,我不确定,List是通过值还是通过引用传递的。 我在网上找到了一个页面,建议使用ref关键字。 我现在有: public Class FooClass {…} class Program { static void Main(string[] args) { List fooDB = new List; initFromFile(ref fooDB); } private static initFromFile(ref List fooDB) { using (StreamReader … ) { while( … ) { … fooDB.Add(new FooClass(args)) } } […]

C#参数通过引用和.net垃圾回收

我一直在试图找出.NET垃圾收集系统的复杂性,我有一个与C#引用参数有关的问题。 如果我理解正确,方法中定义的变量将存储在堆栈中,不受垃圾回收的影响。 所以,在这个例子中: public class Test { public Test() { } public int DoIt() { int t = 7; Increment(ref t); return t; } private int Increment(ref int p) { p++; } } DoIt()的返回值为8.由于t的位置在堆栈上,因此该内存不能被垃圾收集或压缩,并且Increment()中的引用变量将始终指向t的正确内容。 但是,假设我们有: public class Test { private int t = 7; public Test() { } public int DoIt() { Increment(ref t); return […]

通过ref和out传递

因此,如果我使用foreach循环进行迭代,并且我在内部有一个函数,它接受从列表迭代的对象的参数,并且假设我将其值设置为不同。 我为什么不用出来或参考? 我认为它只是通过值传递,如果你没有使用或参考….我知道你必须在前后初始化变量你只需要在从方法返回之前设置它的值。 看起来如果你通过列表​​迭代并传递一个实际通过引用传递的对象。 请考虑以下示例。 例 class Program { static void Main(string[] args) { List list = new List(); list.Add(new Foo() { Bar = “1” }); list.Add(new Foo() { Bar = “2” }); foreach (var f in list) { Foo f2 = f; Console.WriteLine(“SetFoo Pre: ” + f2.Bar); SetFoo(f2); Console.WriteLine(“SetFoo Post: ” + f2.Bar); Console.WriteLine(“SetFooRef […]