Видя твой пример, я подозреваю, что у тебя нет требования, чтобы идентификатор был уникальным?
В целом, чтобы избежать неприятных проблем, подобных этой, не пытайтесь использовать повторяющиеся имена свойств, но, возможно, вы связаны с существующим интерфейсом.
Как насчет добавления перегрузки конструктора, которая принимает «внешний» идентификатор в качестве параметра?
void Foo()
{
string ID = "test";
var testctrl = new Control(ID);
}
В общем, я думаю, что если свойство делает больше, чем просто присваивание (проверка аргументов в данном случае), вы должны делать это в «наборе» самого свойства, а не во время «инициализации объекта».