Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

240
Views
Cómo saber si una variable es solo un "puntero" a otro objeto o si puede existir de forma independiente
$App = New-Object -TypeName Microsoft.SqlServer.Dts.Runtime.Application; $PackageFullPath = 'C:\SSISPackage.dtsx'; $Package = $App.LoadPackage($PackageFullPath, $null, 0); $x = $Package.Connections $x.Remove("Something") $App.SaveToXml($PackageFullPath, $Package, $null)

Mi pregunta es cuando asigno la instancia a una nueva variable $x , ¿cómo sé cuando llamo a un método en $x que se reflejará en $Package ? Entonces, cuando elimine algo de $x , ¿también eliminará esa cosa de $Package ? Si la respuesta es "depende", ¿cómo puedo saberlo sin configurar un experimento?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

tl; dr

Dado que la propiedad $Package.Connections contiene una instancia de un tipo de referencia de .NET, a saber, Microsoft.SqlServer.Dts.Runtime.Connections , $x y $Package.Connections referencia a la misma instancia de colección, por lo que $x.Remove("Something") es lo mismo que $Package.Connections.Remove("Something")


El comportamiento depende de si un valor dado es una instancia de un tipo de referencia o un tipo de valor de .NET:

  • Cuando las instancias de tipo de referencia se asignan a una (nueva) variable/se pasan como argumento, es la referencia ("puntero") a los datos reales lo que se copia, lo que significa que tanto el valor original como la variable/parámetro de destino se refieren al mismo objeto .

  • Por el contrario, asignar/pasar una instancia de tipo de valor hace una copia del valor en sí , lo que da como resultado copias independientes de los datos.

Puede examinar un objeto almacenado en una variable dada $x de la siguiente manera: $true indica una instancia de tipo de valor, $false una instancia de tipo de referencia:

 $x.GetType().IsValueType

Tenga en cuenta que los tipos de colección , incluidas las matrices , son instancias de tipo de referencia , por lo que $x y $Package.Connections en el código de su pregunta se referirán a la misma colección.
Por el contrario, todos los llamados tipos primitivos , como los números, son tipos de valor .

Si no desea depender de la inspección en tiempo de ejecución , puede examinar la documentación de un tipo determinado, que (con el lenguaje configurado en C#) utilizará los siguientes identificadores de "tipo-clase":

  • Tipos de referencia:
    • class (por ejemplo, ArrayList )
  • Tipos de valores:
    • struct (por ejemplo, DateTime )
    • enum (por ejemplo, PlatformID )
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!