Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-数组新手,需要澄清_C# - Fatal编程技术网

C#-数组新手,需要澄清

C#-数组新手,需要澄清,c#,C#,我无法理解\u path=path如何理解它是如何工作的以及为什么需要它 namespace Program { class Path { private readonly MapLocation[] _path; public Path(MapLocation[] path) { _path = path; } } } 基本上,您是将构造函数传入的数组path分配给变量_path,在上面的示

我无法理解
\u path=path如何理解它是如何工作的以及为什么需要它

namespace Program
{
    class Path
    {
      private readonly MapLocation[] _path; 

      public Path(MapLocation[] path)
       {
          _path = path;
       } 
    }
}
基本上,您是将构造函数传入的数组path分配给变量_path,在上面的示例中,我将它们重命名为AB,因此它是将映射位置的数组从构造函数分配给对象变量(B)用于存储


基本上,您是将构造函数传入的数组path分配给变量_path,在上面的示例中,我将它们重命名为AB,因此它是将映射位置的数组从构造函数分配给对象变量(B)用于存储。

路径
是一个类。在类之外,可以创建一个或多个类型为
Path
的对象

每个
Path
对象都有一个对
MapLocation
对象数组的私有引用。此数组引用称为
\u path

当构造
Path
对象时,对
MapLocation
对象数组的另一个引用将作为名为
Path
的参数传递到
Path()
构造函数中。可能期望引用的数组已经包含一些
MapLocation
对象


您询问的代码行的目的是使
\u path
引用与
path
相同的MapLocation数组。这样创建的
Path
的新实例将能够访问/使用该数组。

Path
是一个类。在类之外,可以创建一个或多个类型为
Path
的对象

每个
Path
对象都有一个对
MapLocation
对象数组的私有引用。此数组引用称为
\u path

当构造
Path
对象时,对
MapLocation
对象数组的另一个引用将作为名为
Path
的参数传递到
Path()
构造函数中。可能期望引用的数组已经包含一些
MapLocation
对象


您询问的代码行的目的是使
\u path
引用与
path
相同的MapLocation数组。因此,正在创建的
Path
的新实例将能够访问/使用该数组。

这里有一些事情需要了解,所以让我们一步一步地进行

值类型与参考类型

值类型:

在C#中,有些东西是通过值传递的,而另一些东西是通过引用传递的。以下是通过值传递的内容的示例:

class Path
{
  private readonly MapLocation[] B; 

  public Path(MapLocation[] A)
   {
      B = A;
   } 
}
下面是我们将如何使用上述类:

class Path
{
   private int _number; 

   public Path(int number)
   {
      _number = number;
   } 
}
class Path
{
   private readonly MapLocation[] _path; 

   public Path(MapLocation[] path)
   {
      _path = path;
   } 
}
变量
number
按值传递。这意味着:将存储在
number
中的值的副本传递给
p1
对象。因此,如果在
路径
类中更改它的值,则传递的
编号
的值不会更改。它只会在
p1
对象中更改。请阅读更多关于

参考类型:

数组是C#中通过引用传递的东西之一。这里有一个例子。稍后我将解释
只读

int number = 5;
Path p1 = new Path(number);
下面是我们将如何使用上述类:

class Path
{
   private int _number; 

   public Path(int number)
   {
      _number = number;
   } 
}
class Path
{
   private readonly MapLocation[] _path; 

   public Path(MapLocation[] path)
   {
      _path = path;
   } 
}
变量
位置
通过引用传递。这意味着:对存储
locations
的内存位置的引用被传递给
p1
对象。因此,如果在
路径
类中更改它的值,例如,如果将另一项添加到数组中,您将注意到
位置
中的更改。为什么?因为您传递了对
位置
的内存位置的引用,因此无论谁(例如
路径
)有权访问它,他们都可以在该位置更改内容。请阅读更多关于。因此,我们将
位置
的引用传递给
路径
构造函数,并在构造函数中分配给
\u路径
变量

理解引用类型最简单的方法是想象您正在传递一根绑在内存位置上的绳子。任何有绳子的人,都可以找到记忆的位置并改变它。因此,在我们的示例中,我们创建了一个名为
locations
的变量,然后在该变量上系一根绳子。我们将rope的另一端传递给
路径
构造函数,在构造函数中,rope被传递给
\u路径
变量。现在,在类中,您可以使用名为
\u path
的绳子,找到一直到
位置的内存位置。这条绳子可以跨越许多类和方法等等。不管怎样,绳子够了

那么,
readonly
的作用是什么呢?这意味着对变量的赋值只能在构造函数内部进行,而不能在其他地方进行。因此,在您的示例中,
\u path
只能从它出现的类的构造函数中分配,在本例中,该类是
path
。但你会问为什么会有人想这么做?有时候你想创建一个类,给变量赋值,然后你就再也不想让任何人给它赋值了


希望这能有所帮助。

这里有几件事你需要了解,所以让我们一步一步来做

值类型与参考类型

值类型:

在C#中,有些东西是通过值传递的,而另一些东西是通过引用传递的。以下是通过值传递的内容的示例:

class Path
{
  private readonly MapLocation[] B; 

  public Path(MapLocation[] A)
   {
      B = A;
   } 
}
下面是我们将如何使用上述类:

class Path
{
   private int _number; 

   public Path(int number)
   {
      _number = number;
   } 
}
class Path
{
   private readonly MapLocation[] _path; 

   public Path(MapLocation[] path)
   {
      _path = path;
   } 
}
变量
number
由值传递