Os methods que retornam referências de retorno de tipos de referência ou cópia clonada?

Eu tenho aprendido Java hoje em dia e o que eu li é "Be careful not to write accessor methods that return references to mutable objects" que é realmente interessante. E agora eu estou querendo saber se é mesmo para propriedades e methods Accessor em c #? Ou C # já retorna cópias clonadas automaticamente?

Obrigado.

Uma referência é apenas isso … uma referência a algum object armazenado na memory. A menos que você escreva explicitamente o código para criar um clone e retornar uma referência a esse object, você sempre estará passando uma referência à mesma instância.

A situação que você está tentando evitar é entregar uma referência de object ao chamador do qual você depende. Você não tem controle sobre quem ou o que pode estar alterando o estado desse object e, portanto, sua class pode acabar com resultados imprevisíveis.

Um exemplo bobo:

 public class Employee { public Salary Salary {get; set;} public void GiveRaise() { Salary.Total *= .25; if(Salary.Total > 100000) { Promote(); GiveBiggerOffice(); } else { GiveWatch(); } } } 

Então digamos que esse cara tenha um salário de US $ 50.000 e tenha recebido um aumento. Agora seu salário é de US $ 62.500 e ele deveria estar recebendo um bom relógio novo. No entanto, é muito possível que outro Thread tenha uma referência a este object Employee . Isso significa que eles também têm access à propriedade Salary e podem alterar o total do salário acima de US $ 100.000 antes que o bloco if seja executado.

Nesse cenário embaraçoso, o funcionário receberia uma promoção e um novo escritório, embora o método Raise() fosse chamado apenas uma vez.

Tola eu sei, mas demonstra o ponto.

Intereting Posts