На самом деле, я предпочитаю второй стиль как метод является мутатором, следовательно, новое значение не ожидается, будет возвращена, а ожидается, что фактическое значение будет изменено. Однако вам может потребоваться указать, что ModifyIt принимает переменную ref только для указания того, что фактический c будет изменен. c здесь передается по значению, хотя это ссылочный тип, по-прежнему существует разница между передачей ссылочных типов по значению и передачей ссылочных типов по ref. Смотрите следующее:
public void ModifyIt(Myclass c) { c = new MyClass(); }
в вышеуказанном случае переменной с будет передаваться по значению (т.е. копия ссылки будет передана и изменена, чтобы указать на недавно instanitiated объект, который, в свою очередь, означает, что вы будет иметь два объекта MyClass типа в этом случае Вот пример для иллюстрации:.
Myclass s = new MyClass() { prop = "value" }; ModifyIt(s); Console.WriteLine(s.prob); // this will print "value"
хотя MOdifyIT instanitaited в СПРАВКИ на новый объект, который должен означать, что Prob инициализируется нулем, он на самом деле Ждут» t экземпляр s, он создавал копию s. в отличие от ca se, если s был принят ref.
Надеюсь, что это поможет!
Почему вы передаете «Класс x» в качестве параметра в ModifyIt()? Может ли ваш метод не просто воспринимать экземпляр класса как «это»? Учитывая код, у вас есть все другие ответы, касающиеся цепочки, не будет работать. Для меня вопрос будет, если ваш класс больше относится к типу значений, и в этом случае вы не должны изменять свои экземпляры, а скорее возвращать новый результат с результатом. – van