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

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

, Кроме того, было большое политиканство и бездельничание, прежде чем Java 1.5 вышел. Многие компании использовали сторонние взломы как Универсальный Java, потому что эти функции базового языка не были доступны, но сильно желаемы.

я думаю, что они убыстрились снова, с тех пор 1.5, с 1,7 на горизонте, и похоже, что каждый из них обеспечил очень полезные новые возможности. Открытое определение источника языка хорошо также.

И независимо от того, что некоторые люди говорят, сохранение назад совместимости было очень важной функцией на языке Java.

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

64
задан Kiquenet 23 February 2016 в 12:45
поделиться

2 ответа

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

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

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

99
ответ дан 24 November 2019 в 15:53
поделиться

Для загрузки сборки и ввода, указанного в вашем примере:

Assembly design = Assembly.LoadFile(@"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Design.dll");
Type designHost = design.GetType("System.ComponentModel.Design.DesignerHost");
14
ответ дан 24 November 2019 в 15:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: