C# C中的引用到底是什么#
根据我现在的理解,我可以说C#中的引用是一种指向对象的指针,该对象具有引用计数,并且知道类型兼容性。我的问题不是关于值类型与引用类型有何不同,而是关于如何实现引用 <>我已经阅读了引用和指针之间的区别,但这并没有涉及到引用的内容,而是它与C++中的指针相比,更多地描述了它的属性。我也理解按引用传递和按值传递之间的区别(如在C#中,对象默认按值传递,甚至是引用),但是,当我试图向同事解释为什么通过引用发送的参数不能像Eric Lippert关于堆栈的实现细节那样存储在闭包中时,我很难理解什么是引用 有人能给我一个完整的,但希望是简单的解释,说明什么是C#中真正的引用,以及它们是如何实现的吗 <>编辑:这不是一个重复,因为它解释了一个引用是如何工作的,它是如何与一个值不同的,但是我要问的是如何在一个低级别上定义一个引用。C++中的< /P> < P>引用与C++引用非常类似。是的,事实上,垃圾收集的魔力正在发挥,但我想说的是,这是一个不同的、更大的话题C# C中的引用到底是什么#,c#,pointers,reference,C#,Pointers,Reference,根据我现在的理解,我可以说C#中的引用是一种指向对象的指针,该对象具有引用计数,并且知道类型兼容性。我的问题不是关于值类型与引用类型有何不同,而是关于如何实现引用 我已经阅读了引用和指针之间的区别,但这并没有涉及到引用的内容,而是它与C++中的指针相比,更多地描述了它的属性。我也理解按引用传递和按值传递之间的区别(如在C#中,对象默认按值传递,甚至是引用),但是,当我试图向同事解释为什么通过引用发送的参数不能像Eric Lippert关于堆栈的实现细节那样存储在闭包中时,我很难理解什么是引用 有
C引用与C++引用/不变指针类似:没有指针算术等,但可以重新分配它们(谢谢本!) 我要说的是,在实践中,一个区别是,由于指针在C#中通常不可用(不安全的关键字及其关联的指针又是一个不同且更大的主题),所以您会发现自己使用“out”关键字来完成指针指向指针的操作
您断言引用携带类型信息也是正确的。C#中的所有引用都来自对象类,对象类本身具有GetType()方法 但是,请注意,结构(通常被视为值,而不是引用)也有GetType() 根据我现在的理解,我可以说C#中的引用是一种指向对象的指针 如果你所说的“种类”是指“在概念上类似于”,是的。如果你的意思是“可以实施”,是的。如果您的意思是“与具有某种关系”,如“字符串是一种对象”,则不是。C类型系统在引用类型和指针类型之间没有子类型关系 哪个有引用计数 CLR的实现允许使用引用计数语义,但不需要这样做,而且大多数都不需要 并且知道类型兼容性 我不知道这是什么意思。对象知道自己的实际类型。引用具有与可验证代码中的实际类型兼容的静态类型。兼容性检查是在分析IL时由运行时的验证器实现的 我的问题不是关于值类型与 引用类型,但更多关于如何实现引用的信息 毫不奇怪,如何实现引用是一个实现细节 有人能给我一个完整的,但希望是简单的解释,关于C#中真正的引用是什么 引用是C语言规范指定作为引用的东西。即:- 对象(引用类型)具有独立于其字段值的标识
- 任何对象都可以引用它
- 这种引用是一个可以像任何其他值一样传递的值
- 对这些值执行相等比较
- 两个引用当且仅当它们引用同一对象时才相等;也就是说,引用具体化了对象标识
- 存在唯一的空引用,它不引用任何对象,并且不等于对对象的任何有效引用
- 静态类型对于任何引用值都是已知的,包括null引用
- 如果引用为非null,则引用的静态类型始终与引用的实际类型兼容。例如,如果我们有一个对字符串的引用,引用的静态类型可以是string、object或IEnumerable,但不能是Giraffe。(显然,如果引用为null,那么就没有要具有类型的referent。)
ref
参数)和对t的引用是很重要的
void M()
{
int x = 123;
N(ref x);
}
void N(ref int y)
{
y = 456;
static bool EqualAliases(ref int y, ref int z)
{
return true iff y and z are both aliases for the same variable
}
static bool EqualReferences(object x, object y)
{
return x == y;
}