Tag: reference type

用例在C#中装箱值类型?

在某些情况下,需要将值类型的实例视为引用类型的实例。 对于这种情况,可以通过名为boxing的过程将值类型实例转换为引用类型实例。 当盒式化值类型实例时,将在堆上分配存储,并将实例的值复制到该空间中。 对此存储的引用放在堆栈上。 盒装值是一个对象,一个包含值类型实例内容的引用类型。 了解.NET的通用类型系统 在维基百科中有一个Java示例。 但是在C#中,有哪些情况需要打包一个值类型? 或者更好/类似的问题是,为什么人们想要在堆上(盒装)而不是堆栈上存储值类型?

C#字符串引用类型作为副本传递?

我怀疑与C#“String”引用类型有关。 以下代码: string s = “lana del rey” string d = s; s = “elvis presley”; Console.Writeline(d); 为什么输出不是“elvis presley”? 如果d指向s的相同内存位置? 你能解释一下吗? 我最初问题的更详细解释: 你的所有答案都非常有用。 这个常见的代码示例经常用来解释值类型和引用类型之间的区别,这个问题来找我: class Rectangle { public double Length { get; set; } } struct Point { public double X, Y; } Point p1 = new Point(); p1.X = 10; p1.Y = 20; Point […]

c#字符串是引用类型 – 为什么当我更改引用A的值时,引用B不会改变?

如果.NET中的字符串是引用类型,在下面的代码中,为什么string1更改后string2不会更改为“hi”? static void IsStringReallyAReference() { string string1 = “hello”; string string2 = string1; Console.WriteLine(“– Strings –“); Console.WriteLine(string1); Console.WriteLine(string2); string1 = “hi”; Console.WriteLine(string1); Console.WriteLine(string2); Console.Read(); } /*Output: hello hello hi hello*/

值类型和引用类型问题

嗨,我正在尝试做两个对象的简单交换。我的代码是 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; } 由于对象是引用类型,因此应将其引用传递给方法,并且应该交换。 为什么不发生?

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

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

在c#中存储引用

我正在尝试设计一个类,它可以在销毁时更新对象(类外)的引用。 所以基本上你创建了这个对象的实例并传递了一个引用类型(以任何方式,构造函数等),然后在对象的销毁时,原始引用已经更改为由对象创建的引用。 如果我通过引用传递引用(比如在构造中),我无法想出一种方法来存储此引用(作为参考)以供析构函数更新它? 例如(伪): class Updater { object privateReference; public Updater(ref object externalReference) { privateReference = externalReference; //is privateReference now a new reference to the original object? } ~Updater() { privateReference = new object(); //therefore this isn’t ‘repointing’ the externalReference } } 这里的关键是我不是要试图从这个类中改变原来的“外部”对象,我试图“重新命名”它,或者如果你愿意,可以将它初始化。

Guid被认为是值类型还是引用类型?

Guids是使用new关键字创建的,这使我认为它是一种引用类型。 它是否正确? Guid uid = new Guid(); Guids是否存储在堆上?

在C#中使用带有`new`运算符的值类型的困境

当operator new()与引用类型一起使用时,实例的空间在堆上分配,引用变量本身放在堆栈上。 除此之外,在堆上分配的引用类型实例中的所有内容都将被清零。 例如,这是一个类: class Person { public int id; public string name; } 在以下代码中: class PersonDemo { static void Main() { Person p = new Person(); Console.WriteLine(“id: {0} name: {1}”, p.id, p.name); } } p变量在堆栈上,并且创建的Person实例(所有它的成员)都在堆上。 p.id为0 , p.name为null 。 这将是这种情况,因为堆上分配的所有内容都已清零。 现在我感到困惑的是,如果我使用带有new运算符的值类型。 例如,考虑以下结构: struct Date { public int year; public int month; public int day; […]

如何制作参考类型的副本

可能重复: 在C#中克隆对象 我有一个包含属性的类,其中一些是引用类型(其他类的实例)本身( CookieContainer )。 我想拥有此类的精确副本,因此对先前版本的任何更改都不会影响此新实例。 是否存在针对此类问题的通用解决方案,或者我应该手动执行此操作?

在C#中,使用值类型与引用类型

我的问题是: 什么时候我们应该使用值类型和引用类型? 一个优于其他的优点和缺点是什么? 如果在任何地方使用引用类型怎么办 它有什么危害吗? 还请讨论每个的优点和缺点。 我也想了解这一点。