Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

238
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda