Будет ли использование работать на нуле?

это случилось со мной, когда я импортировал приложение Android Studio в eclipse.

Я выяснил, что файл andoridmanifest.xml должен быть слегка изменен при импорте из проекта студии Android. Я создал новый тестовый проект и скопировал заголовки, чтобы они совпадали. вуаля, проблема решена.

13
задан Prankster 1 April 2009 в 23:24
поделиться

8 ответов

Да, это будет работать, проверить этот запускающий тест:

[TestMethod]
public void TestMethod8()
{
    using (new MyClass() as IDisposable)
    {
    }
}
public class MyClass { }

Это просто работает без любой проблемы. Если соответствующий класс реализует IDisposable, то он назовет его, если не он будет все еще работать/выполнять :).

Обновление: Как другие сказали, я также задаюсь вопросом, что проку, Вы хотите дать ему. Мое предположение - Вы, имеют что-то как фабрика, которая может получить экземпляры от различных классов, которые могут или не могут быть доступными :).

10
ответ дан 1 December 2019 в 19:50
поделиться

Да. A using оператор проверяет, дается ли он null и старается не пытаться звонить Dispose раз так.

От раздела 8.13 из спецификации C# 3:

Оператор использования переводится в три части: приобретение, использование и распоряжение. Использование ресурса неявно включается в оператор попытки, который включает наконец пункт. Это наконец пункт избавляется от ресурса. Если пустой ресурс получен, то никакой вызов для Расположения не выполняется, и никакое исключение не выдается.

16
ответ дан 1 December 2019 в 19:50
поделиться

Это должно хорошо работать, даже если не "правильный" подход к избавлению от ресурсов. using statment является просто синтаксическим сахаром для

IDisposable o = ...;

try
{
  // ...
}
finally
{
  if (o != null)
    o.Dispose(true);
}

Таким образом, если o никогда не реализован IDisposable это было бы пустым в using оператор и это попытались бы звонить Dispose на нем.

2
ответ дан 1 December 2019 в 19:50
поделиться

При тестировании кода это, кажется, не приводит к любой компиляции - или ошибки периода выполнения.

Из определения языка (см. раздел 8.13):-

Если пустой ресурс получен, то никакой вызов для Расположения не выполняется, и никакое исключение не выдается.

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

Короче говоря, ответ на Ваш вопрос - да.

2
ответ дан 1 December 2019 в 19:50
поделиться

Если "им будет работать", Вы подразумеваете, что получите ошибку периода выполнения? Нет, Вы не будете.

1
ответ дан 1 December 2019 в 19:50
поделиться

Что проку от этого? Каково преимущество? Каково преимущество?

Оператор использования удостоверится, что Расположить метод называют, но если Ваш объект не реализует IDisposable, я вижу, что нет смысла делает это? Это будет работать (как в, это не выдаст исключения на этапе выполнения, и это скомпилирует), я только что протестировал его здесь, но...

С кодом Вы записали, Вы не можете даже использовать ресурс, как являющийся IDisposable...

1
ответ дан 1 December 2019 в 19:50
поделиться

Может быть полезно, когда тип явно реализует IDisposable, в этом случае, Расположить метод не непосредственно доступен на типе, если тип не является литым к IDisposable, Используя, 'как' делает безопасный бросок и гарантирует, чтобы Расположили, назван. В большинстве случаев, когда тип явно реализует IDisposable, он предоставляет методы такой как 'Близко', который в свою очередь звонит, Располагают

1
ответ дан 1 December 2019 в 19:50
поделиться

Я полагаю, что компилятор действительно добавляет проверки, чтобы определить, является ли это пустым прежде, чем попытаться звонить, Располагают.

http://aspnetresources.com/blog/the_very_handy_using_statement.aspx

0
ответ дан 1 December 2019 в 19:50
поделиться
Другие вопросы по тегам:

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