.Net строки неизменяемы и интернированы.
Неизменность делает строки неизменяемыми после их создания.
Стажировка заставляет CLR использовать один экземпляр строки с одинаковым содержимым.
Это также затрудняет избавление от строки.
С MSDN
.. память, выделенная для интернированных объектов String, вряд ли будет
освобождается до тех пор, пока не закончится среда CLR.
причина в том, что ссылка CLR на интернированный объект String может
сохраняться после вашей заявки или даже домена приложения,
завершается.
Вы можете использовать SecureString, но это не очень удобно, так как не многие элементы управления WPF поддерживают его, кроме PasswordBox.
Например, бывают случаи, когда вам нужно показать пользователю пароль, но без преобразования SecureString обратно в обычную строку это невозможно. Это возвращает к проблемам, которые мы намереваемся смягчить.
Так что, по моему мнению, WPF / C # не будет хорошей языковой платформой-кандидатом для приложения с конфиденциальными данными.