C # надає ключове слово ref
та out
ключове слово, щоб зробити аргументи для передачі посилань. Смисловість двох дуже схожа. Єдина відмінність полягає в ініціалізації флагізованої змінної:
ref
вимагає, щоб змінна була ініціалізована перед передачею її у функцію,out
не робить.out
вимагає, щоб змінна була ініціалізована всередині функції,ref
не робить.
Випадки використання цих двох ключових слів також майже однакові, і їх занадто часте використання, я вважаю, вважається запахом коду (хоча є дійсні випадки використання, такі як TryParse
і TryGetValue
шаблони).
Через це міг би хтось пояснити, чому в C # є два дуже схожі інструменти для таких вузьких випадків використання?
Також в MSDN зазначається, що вони мають різну поведінку під час виконання:
Хоча ключові слова ref і out викликають різну поведінку під час виконання, вони не вважаються частиною підпису методу під час компіляції.
Чим відрізняється їх поведінка під час виконання?
Висновок
Обидві відповіді виглядають правильно, дякую обом. Я прийняв jmoreno 's, тому що це більш явно.
ref
в C ++; на вказівники на предметний вказівник (або примітивний), про який йде мова. тобтоInt32.TryParse(myStr, out myInt)
(C #) "виконується" так само, як іint32_tryParse(myStr, &myInt)
(C); Єдина відмінність полягає в деяких обмеженнях, що застосовуються компілятором для запобігання помилок. (Я не збираюся розміщувати це як відповідь, тому що я можу помилятися з приводу того, як це працює за лаштунками, але я вважаю, що це працює [бо це має сенс])