Pergunta

Pelo que entendi, C# passa parâmetros para métodos por referência.No VB.NET, você pode especificar isso com ByVal e ByRef.O padrão é ByVal.

Isso é para compatibilidade com o Visual Basic 6.0 ou é apenas aleatório?Além disso, como posso especificar o que usar em C#?Gosto da ideia de passar parâmetros por valor.

Foi útil?

Solução

Os parâmetros em C# são, por padrão passado por valor.Não há modificador para tornar isso explícito, mas se você adicionar ref / out o parâmetro é por referência.

A confusão usual aqui é a diferença entre:

  • passando um tipo de valor por valor (as alterações no tipo de valor não são visíveis para o chamador, mas o ideal é que os tipos de valor sejam imutáveis ​​de qualquer maneira)
  • passando um tipo de valor por referência (as alterações no tipo de valor são visíveis para o chamador, mas o ideal é que os tipos de valor sejam imutáveis ​​​​de qualquer maneira - tão importante que direi duas vezes; p)
  • passando uma referência por valor (muda para campos/propriedades do tipo ref são visíveis para o chamador, mas reatribuindo o tipo de referência para um objeto novo/diferente é não visível)
  • passando uma referência por referência (alterações em campos/propriedades, e reatribuir a referência são visíveis para o chamador)

Outras dicas

A passagem pelo valor é o padrão em C#. No entanto, se a variável que está sendo passada for do tipo de referência, você estará passando pelo referência por valor. Essa talvez seja a origem de sua confusão.

Basicamente, se você passar uma referência por valor, poderá alterar o objeto que ele se refere e essas alterações persistirão fora do método, mas você não pode fazer a variável se referir a um objeto diferente e ter essa mudança persistir fora do método.

Os parâmetros em C# são aprovados "BYVAL" por padrão. Você precisa especificar "ref" ou "out" se quiser um comportamento diferente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top