Другое событие NullPointerException
возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.
String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals
для гарантированного непустого объекта.
Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null
.
Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.
String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Более конкретно
AppDomain domain = AppDomain.CreateDomain("New domain name");
//Do other things to the domain like set the security policy
string pathToDll = @"C:\myDll.dll"; //Full path to dll you want to load
Type t = typeof(TypeIWantToLoad);
TypeIWantToLoad myObject = (TypeIWantToLoad)domain.CreateInstanceFromAndUnwrap(pathToDll, t.FullName);
, Если все, что идет правильно (никакие выданные исключения) Вы теперь, имеет экземпляр TypeIWantToLoad, загруженного в Ваш новый домен. Экземпляр, который Вы имеете, является на самом деле прокси (так как фактический объект находится в новом домене), но можно использовать его точно так же, как обычный объект.
Примечание: Насколько я знаю, что TypeIWantToLoad должен наследоваться MarshalByRefObject.
Если Вы нацелены 3.5, можно использовать в своих интересах новое управляемая платформа расширяемости для обработки всего тяжелого подъема для Вас.
Можно использовать AppDomain. Метод CreateInstance , чтобы сделать это. Необходимо будет назвать Разворачивать метод ObjectHandle, который возвращается для достигания фактического объекта.
Создайте новый Appdomain с AppDomain. Создайте (...). После создания AppDomain загружают DLLs в тот AppDomain.
Изучают все методы, которые Appdomain имеет с Create*. Существуют определенные вещи как CreateInstanceAndUnwrap, и т.д.
Как ранее указано, используйте AppDomain. CreateDomain для создания нового домена приложения. Можно затем загрузить блок в него с помощью метода Загрузки или даже выполнить блок с помощью метода ExecuteAssembly. Можно использовать GetAssemblies, чтобы видеть, был ли блок уже загружен. Знайте также, что Вы не можете разгрузить блок, после того как он загружается. Необходимо будет разгрузить домен.