Переименовать NameSpace в отражении?

когда код пытается получить имя пространства имен через отражение, используя либо:

typeof(MyNamespace.MyClass).Namespace;

или другие методы, я хочу, чтобы имя пространства имен возвращало мою предопределенную строку.

Это не работает:

typeof(MyNamespace.MyClass).Namespace  = "helloWorld";

в любом случае?

p.s. пожалуйста, не публикуйте ответы типа: «Изменить пространство имен в исходном коде» ...

System.Type.Namespace - это по вполне понятным причинам, свойство только для чтения (т.е. без сеттера). Я полагаю, что изменение пространств имен во время выполнения невозможно, это кажется невероятно опасным процессом (и я, честно говоря, не могу придумать вариант использования прямо сейчас)
maccettura 01.05.2018 17:40
any ways? Измените пространство имен в исходном коде.
Dan Wilson 01.05.2018 17:42

Интересно, какое требование привело к этому вопросу.

Evk 01.05.2018 18:04

да, у меня есть конкретная причина для этого .. не могу объяснить.

T.Todua 01.05.2018 18:35

Используйте Reflection.emit для создания новой сборки и сохранения на диск с новым пространством имен.

Lasse V. Karlsen 01.05.2018 18:37

@ T.Todua Пожалуйста, объясните свое требование. Это все торговые марки XY проблема, и вы можете получить более точные предложения, если мы поймем, зачем вам это нужно.

BJ Myers 01.05.2018 18:39

Тода, вы, как и мы, точите тип «линзы» (чистый = неокрашенный), которую вы должны использовать, чтобы увидеть, что синий автомобиль желтый. Как вы думаете, что это за ответ? Или другой способ, как с помощью калькулятора (Windows) скопировать видео файлы с Youtube на ваш диск. Когда приложение использует пространство имен, его можно изменить только путем перекомпиляции или изменения с помощью некоторых инструментов IL, но не во время выполнения. Даже когда это было бы возможно (с изменением памяти), антивирусное решение, вероятно, отловило бы эту попытку изменить код работающего приложения. Это плохая идея. Запрос неверен или плохо понят

Julo 01.05.2018 19:01

@Julo, пожалуйста, опубликуйте это как ответ, я должен проголосовать за него

T.Todua 19.10.2018 18:57
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
8
98
1

Ответы 1

Часть API отражения, которая имеет дело с типами и другими метаданными сборки, доступна только для чтения. Вы не можете изменять или влиять на значения, возвращаемые любым из таких вызовов (включая пространство имен) - они просто читают метаданные сборки.

Чтобы добиться того, о чем вы просите, вам нужно будет изменить и перекомпилировать исходный код (непосредственно или после декомпиляции IL) и переписать пространства имен перед компиляцией.

Другие вопросы по теме