Подтвердить что ты не робот

Как получить доступ к внутреннему классу с помощью Reflection

Как получить доступ к внутреннему классу сборки? Скажем, я хочу получить доступ к System.ComponentModel.Design.DesignerHost. Здесь DesignerHost является внутренним и закрытым классом.

Как написать код для загрузки сборки и типа?

4b9b3361

Ответ 1

В общем, вы не должны этого делать - если тип был помечен как внутренний, это означает, что вы не собираетесь использовать его вне сборки. Его можно удалить, изменить и т.д. В более поздней версии.

Однако отражение позволяет вам обращаться к типам и членам, которые не являются общедоступными, - просто найдите перегрузки, которые принимают аргумент BindingFlags, и включите BindingFlags.NonPublic в флаги, которые вы передаете.

Если у вас есть полное имя типа (включая информацию о сборке), тогда нужно работать только с вызовом Type.GetType(string). Если вы знаете сборку заранее и знаете общедоступный тип внутри этой сборки, то использование typeof(TheOtherType).Assembly для получения ссылки на сборку обычно проще, вы можете вызвать Assembly.GetType(string).

Ответ 2

Чтобы загрузить сборку и введите ее в своем примере:

Assembly design = Assembly.LoadFile(@"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Design.dll");
Type designHost = design.GetType("System.ComponentModel.Design.DesignerHost");