Существует по крайней мере один явный случай, в котором вы НЕ должны использовать автоматически реализуемые свойства: любой вид двоичной сериализации между двумя разными DLL.
Двоичная сериализация опирается на частные члены, и частные вспомогательные элементы для автоматически реализуемых свойств не обязательно будут одинаковыми в каждой скомпилированной DLL, поэтому двоичная сериализация может очень сильно потерпеть неудачу.
Еще одна причина, по которой вы не будете использовать автоматически внедряемые свойства, заключается в том, что вы потеряете контроль над возможностью - указать поле поддержки как NonSerialized, но в этом случае достаточно просто создать поле поддержки для свойства.
Если вы или какой-либо другой продукт, который вы используете, выполняет отражение на участниках (например, WCF), тогда вы увидите искаженное имя вспомогательного поля вместо «симпатичного» созданного вами вспомогательного поля.
Это может быть очень важно, если вы ранее предоставили доступ к сервису или если вы десериализовали на принимающей стороне одну и ту же структуру классов (т.е. те же классы используются на обоих концах канала WCF). В этом случае вы не обязательно сможете десериализовать, потому что можете гарантировать, что имя вспомогательного поля будет одинаковым, если только вы не используете одну и ту же DLL в отличие от исходного кода.
Например, предположим, что у вас есть служба, которая предоставляет некоторые из ваших бизнес-объектов через WCF созданному вами клиенту silverlight. Чтобы повторно использовать вашу бизнес-логику, ваш клиент Silverlight добавляет ссылки на исходный код для ваших бизнес-объектов. Если у вас есть автоматически реализованные свойства, вы не можете контролировать имя вспомогательного поля. Поскольку WCF сериализует элементы, а не свойства, вы не можете быть уверены, что объект, перенесенный в silverlight из службы WCF, будет десериализован правильно, потому что имена вспомогательных полей почти наверняка не будут совпадать.