Я не очень разбираюсь в .NET, поэтому мой ответ относится только к неуправляемой части C ++ вашего вопроса. Лично это одна из главных причин, по которой я избегаю чумы, "использующей пространство имен XXXX;" заявления.
Я предпочитаю просто указывать пространства имен, такие как "std :: cout <<" hello world "<< std :: endl;" </p>
Это позволяет избежать коллизий пространства имен и никогда не возникает двусмысленности относительно того, откуда что-то произошло. Кроме того, когда вы делаете что-то вроде «использование пространства имен std;» вы как бы отменяете то, что дают вам пространства имен. Они были разработаны, чтобы избежать столкновений, и, импортируя все в глобальное пространство, вы просто приглашаете столкновения обратно.
Это строго вопрос мнения и вкуса.
Что касается того, что делать в заголовках, я просто пишу что-то вроде этого: "void f (const std :: string & s);"