Как получить доступ к внутреннему классу с помощью Reflection
Как получить доступ к внутреннему классу сборки?
Скажем, я хочу получить доступ к System.ComponentModel.Design.DesignerHost. Здесь DesignerHost является внутренним и закрытым классом.
Как написать код для загрузки сборки и типа?
Ответ 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");