Это зависит от инвариантов, которые вы ожидаете увидеть в своем приложении.
1. Если вы планируете иметь много MyClass
, имеющих разные состояния (входа в систему, выход из системы), то лучше, чтобы избежать накладных расходов (за исключением, потому что исключение Исключительные ситуации) и использовать некоторые специфические public IsLoggedIn
свойство (очевидно, чтобы избежать отражения) или некоторые методы TryXxxxx
.
И даже если вы не можете изменить исходный код никто не останавливает вас от завернув:
public class MyWrappedClass
{
public Boolean IsLoggedIn {get; private set;}
private MyClass m_Log;
public MyWrappedClass()
{
this.m_Log = new MyClass();
this.IsLoggedIn = false;
}
public void Log()
{
try
{
this.m_Log.LogIn();
this.IsLoggedIn = true;
}
catch
{
this.IsLoggedIn = false;
}
}
public void LogOut()
{
try
{
this.m_Log.LogOut();
this.IsLoggedIn = false;
}
catch
{
this.IsLoggedIn = true;
}
}
}
Можно даже пойти дальше и реализовать IDisposable интерфейс с ним, чтобы избежать ручного управления LogIn-Bход в систему:
public class MyWrappedClass
{
private class LogSessionToken : IDisposable
{
private MyWrappedClass parent;
public LogSessionToken (MyWrappedClass parent)
{
parent.LogIn();
}
public void Dispose()
{
parent.LogOut();
}
}
public IDisposable LogSession()
{
return new LogSessionToken (this);
}
// ...
}
И использовать его как
using (var logToken = wrappedInstance.LogSession)
{
// do the work.
} // No need to worry about manual LogOut
2. Если вы планируете использовать только несколько из MyClass
, тогда было бы лучше не обрабатывать исключение вообще - если что-то случилось, то это некоторая ошибка программирования, поэтому программа должна быть прервана.
Честно говоря, я бы изменил этот класс, чтобы выставить свойство «LoggedIn», но, учитывая выбор, я лично пойду с тем, чтобы поймать исключение. – juharr
Нам нужен больше контекста, основанный на коде, который я сейчас вижу, что этот подход является ужасным. У вас должна быть лучшая архитектура, чтобы представлять статус входа указанного пользователя. По крайней мере, «Свойство» вы можете получить. – Greg
Попробуйте оба и узнайте сами. Или просто избегайте проблемы и не пытайтесь выходить из системы несколько раз в первую очередь. – Servy