1113 После долгого ожидания этого ответа я разобрался, и думаю, что многим другим понадобится простое решение этого вопроса.
Предупреждение. Это решение предназначено для пользователя Eclipse, который использует Indigo или более низкую версию. Все еще ищу решения пользователей, которые используют другие IDE для Android.
Расширяя FragmentActivity
для вашего приложения с версией 2.2 или ниже, вы можете скачать android.supportv4.jar из здесь или вы можете получить его из каталога android-sdk ..\android-sdk\extras\android\support\v4
и вложите в свой проект.
Если в вашем проекте нет директорий libs, создайте директорию libs и вставьте файл android.supportv4.jar в эту директорию.
В рабочей области проекта eclipse: выберите project/application
, в котором вы хотите использовать. Щелкните правой кнопкой мыши по Project
и выберите опцию Properties
. В этом выберите Java build path
и выберите вкладку Libraries
Теперь нажмите Add Jar. Он отобразит текущий список проектов с выбранным текущим проектом.
Разверните это, перейдите в каталог libs и выберите файл android.supportv4.jar, затем нажмите ОК. Это будет отображаться в списке сейчас. Remember add the jar file as relative path path not as absolute path, so whenever if you change the directory of your project or open in another machine then will detect automatically for the project directory.
Теперь нажмите «ОК», чтобы закрыть диалоговое окно «Свойства».
Вы можете импортировать android.support.v4.app.FragmentActivity;
, поместив мышь над FragmentActivity или нажав ctrl + shift + o, чтобы импортировать отсутствующие файлы.
Надеюсь, теперь у вас есть класс FragmentActivity.
Если вы используете eclipse juno, вам не нужно беспокоиться о загрузке файла jar поддержки. Он будет автоматически помещен в каталог libs и автоматически добавлен в путь вашего проекта. Если нет, перейдите к опции Properties
и добавьте ее.
Еще одна вещь. Если вам нужно поддержать ваше приложение для более низкой версии, соберите более высокую версию и добавьте эту строку в файл androidmanifest.xml
, теперь она будет поддерживать от 1,5 до 4,0 .1 версия устройства.
Поместите его в оператор using и посмотрите, компилируется ли он:
using (var x = new TypeInQuestion(params)) {}
Это не будет компилироваться, если TypeInQuestion
не реализует IDisposable.
Другой Самый быстрый способ - использовать ReSharper, щелкнуть по переменной (в данном случае x
) и посмотреть, есть ли у нее предложение поместить ее в оператор using.
К сожалению, не существует "простого простого простого" способа.
Вам нужно будет нажать F12 на имени класса, а затем продолжать нажимать F12 на базовых классах, пока вы не войдете в базовый класс, если какой-либо из них реализует IDisposable, он у вас есть.
Если тип связан с вводом-выводом, окнами / элементами управления или графикой, я обычно воспринимаю это как намек на то, что мне следует искать метод Dispose.
Кроме того, наличие ' Close »может означать, что тип является одноразовым, например, если у вас есть ссылка на XmlReader (который является IDisposable), вы не можете увидеть метод Dispose, потому что он реализован явно.
Если вы получил ReSharper , выделите переменную, дождитесь лампочки и нажмите Alt + Enter. Если один из вариантов - «Обернуть с помощью 'using'», он IDisposable.
Самый быстрый способ для меня - это обычно ввести блок using (с использованием фрагментов) для экземпляра типа, и в этом случае вы получите уведомление об ошибке, если тип не реализует IDisposable. Обычно это занимает всего пару секунд. Не очень удобно, но довольно быстро.
В самых последних IDE, если у меня есть какие-либо вопросы о том, реализует ли что-то IDisposible, я помещаю это в блок using. IDE сообщит вам, что это неверно, еще до того, как вы закончите со следующей строкой кода.
Это можно сделать в PowerShell, например,
[System.Management.Automation.Runspaces.pipeline].getinterface("IDisposable")
возвращает
IsPublic IsSerial Name BaseType -------- -------- ---- -------- True False IDisposable
, а
[datetime].getinterface("IDisposable")
ничего не возвращает.
С плагином ReSharper, установленным в Visual Studio, когда вы наведете курсор на объявление переменной, как на stringWriter в приведенном ниже фрагменте:
TextWriter writer = new StringWriter();
writer.WriteLine("Test");
Вы можете выбрать «поместить в 'using' construct» из меню «лампочка», которое превратит приведенный выше фрагмент в:
using (TextWriter writer = new StringWriter()) {
writer.WriteLine("Test");
}
Если параметр «поместить в ...» отсутствует, тип не реализует IDisposable.
начните печатать и посмотрите, подхватывает ли intellisense метод .Dispose
(согласно комментариям, быстрый и (очень) грязный)
Это не так быстро, но вы также можете запустить FXCop, и он предупредит вас об объектах, которые являются IDisposable и не находятся в блоке using ().
Работа над устаревшим C # кода здесь, на работе, я обнаружил, что тот, кто написал его изначально, фактически создал метод ".Dispose ()" почти для каждого класса, даже если он не нужен, но классы фактически не реализуют IDisposable. Это означает, что в интеллекте все они имеют метод Dispose (), но не могут быть вставлены с помощью блоков () ... очень раздражает!