[C# 2.0] using vs. анонимный метод. Вызов методов Web Service-а
ИМХО, лучше будет такой промежуточный вариант:
using (RemoteFacade remoteFacade = RemoteFacadeFactory.GetInstance
{
string result = remoteFacade.Method1;
}
public class RemoteFacadeFactory
{
public RemoveFacade GetIsntance
{
RemoteFacade instance = new RemoteFacade;
SetProperties(instance);
return instance;
}
}
new RemoteFacade;
В приведенном примере это может не так страшно, но не надо привыкать к плохому стилю.
Можно в фабричном методе написать try/catch.
Страшновато выглядит - кода много.количество кода как раз равное
RemoteFacadeProvider.Do(delegate(RemoteFacade remoteFacade)
{
string result = remoteFacade.Method1;
});
using (RemoteFacade remoteFacade = RemoteFacadeFactory.GetInstance
{
string result = remoteFacade.Method1;
}
Но в первом варианте забыть использовать using нельзя.
public class RemoteFacadeFactory
{
public RemoveFacade GetIsntance
{
RemoteFacade instance = new RemoteFacade;
try
{
SetProperties(instance);
return instance;
}
catch
{
instance.Dispose;
throw;
}
}
}
catchтут finally
{
instance.Dispose;
throw;
}
А зачем тебе постоянно создовать прокси-объект? Создал один раз, и вызывай его методы. Когда он тебе больше не нужен - явно вызови у него Dispose.
string result = RemoteFacadeProvider.Do(
delegate(RemoteFacade remoteFacade)
{
return remoteFacade.Method1;
});
соответственно в трешке будет:
string result = RemoteFacadeProvider.Do(remoteFacade => remoteFacade.Method1;
Ты что? какой finally?
если все хорошо объект надо отдать, а не убить
Но мой вариант для меня привычнее.
если все хорошо объект надо отдать, а не убитьда, извиняюсь, стормозил
code:я вижу только небольшой недостаток первого метода. Если выход из внешнего метода происходит внутри using
RemoteFacadeProvider.Do(delegate(RemoteFacade remoteFacade)
{
string result = remoteFacade.Method1;
});
using (RemoteFacade remoteFacade = RemoteFacadeFactory.GetInstance
{
string result = remoteFacade.Method1;
}
string f
{
using (RemoteFacade remoteFacade = RemoteFacadeFactory.GetInstance
{
return remoteFacade.Method1;
}
}
или
string result = null;
RemoteFacadeProvider.Do(delegate(RemoteFacade remoteFacade)
{
result = remoteFacade.Method1;
});
return result;
Да, пожалуй, что очень похожий код.ты предпочитаешь привычный, но менее безопасный?
Но мой вариант для меня привычнее.
я бы еще рассмотрел вариант - просто нагенерить статических методов заглушек.
В чем заключается меньшая безопасность?
В чем заключается меньшая безопасность?не забудешь using. Точнее даже не надо помнить, что его надо использовать.
Я вот тут подумал... Спасибо за идею!
Оставить комментарий
6yrop
На клменте объект-прокси вебсервиса имплементит IDispose, поэтому его надо использовать в конструкции usung.Методов у сервиса много, не хочется везде повторять 'using ... new ..' и 'SetSomeProperties'. Если использовать анонимные методы, то можно писать вот так
Класс RemoteFacadeProvider
Вопрос: стоит ли так делать? или это усложнение кода, а выгода небольшая. Может быть существует лучший вариант?
Слышал мнение, что новичку это будет сложно понять.