c# – 为什么ref参数类型与常规类型不同?

前端之家收集整理的这篇文章主要介绍了c# – 为什么ref参数类型与常规类型不同?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我理解如何在两种不同类型之间进行,但我的问题是;为什么这种类型的差异?

我原以为它会是ParamterInfo对象的属性,而不是单独的特殊类型.

假设它在反射中作为一个单独的类型呈现,因为它是内部的,它有什么语言好处将它作为一个单独的类型(我猜测更简单的方法重载或其他东西)?

在一个类似的说明中,为什么ref做出一个不同的类型,但out不是(我不能认为ref的原因是一个单独的类型,不适用于out)?

解决方法

public static int SomeMethod(string local,ref string strParam)
{
  local = SomeStaticlyHeldString;
  strParam = SomeStaticlyHeldString;
  int localInt = local.Length;
  return strParam.Length;
}

对local的赋值意味着本地标签现在指向SomeStaticlyHeldString指向的同一对象的内存中的位置.

对strParam的赋值意味着使用ref标签传递给方法的参数在内存中的位置现在指向SomeStaticlyHeldString指向的同一对象.

获取local.Length查询本地指向的对象.获取strParam.Length查询strParam指向的变量指向的对象,指向.

这两者的表现非常不同,不仅仅是在定义参数或本地时,而是每次使用它们.这种差异在很大程度上是隐藏的,因为它们之间的每一次操作都有所不同.

如果我们有一个只有局部变量,某些非本地堆上的对象以及指向这两者的指针的低级语言,那么local将是string *类型和str **类型为string **.这将是我们如何在C中进行类似的操作,以及我们如何在C中执行此操作,尽管它也有引用类型(尽管使用C类型是引用类型更明显是其类型定义的一部分,并且他们有进一步的用途和改进). C#在语法中隐藏了几乎所有这些内容.任何隐藏细节的好处总是值得商榷,但在这种情况下隐藏任何有用的东西都没有多少,所以这是一个很难批评的东西.

猜你在找的C#相关文章