Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

258
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda