CA1064: Wyjątki powinny być publiczne
TypeName |
ExceptionsShouldBePublic |
CheckId |
CA1064 |
Kategoria |
Microsoft.Design |
Złamanie zmiany |
Bez podziału |
Przyczyna
Wyjątek publiczno-pochodzi bezpośrednio z Exception, SystemException, lub ApplicationException.
Opis reguły
Wewnętrzny wyjątek jest widoczna tylko wewnątrz wewnętrznego zakresu.Po wyjątku wychodzi poza zakres wewnętrznego, można tylko podstawowy wyjątek wyjątek należy przechwycić.Jeśli wyjątek wewnętrzny jest dziedziczona z Exception, SystemException, lub ApplicationException, zewnętrzny kod będzie nie posiada wystarczających informacji, aby wiedzieć, co należy zrobić z wyjątkiem.
Ale jeśli kod ma publicznych wyjątków, później używany jako podstawy dla wyjątku wewnętrznego, jest uzasadnione założono, że kod jest poza będą mogli coś inteligentnego z wyjątkiem podstawowej.Publiczne wyjątek będzie mieć więcej niż to, co jest przewidziane przez T:System.Exception, T:System.SystemException lub T:System.ApplicationException.
Jak naprawić naruszenia
Wyjątek publicznej lub pochodzić wewnętrzny wyjątek od publicznego wyjątek, który nie jest Exception, SystemException, lub ApplicationException.
Kiedy do pomijania ostrzeżenia
Komunikat od tej reguły należy pominąć, jeśli masz pewność, we wszystkich przypadkach, że prywatne wyjątek zostanie przechwycony w zakresie wewnętrznych.
Przykład
Ta reguła pożary na przykład metody pierwszego, FirstCustomException, ponieważ klasa wyjątków wynika bezpośrednio z wyjątkiem i wewnętrznych.Reguła nie ognia na klasy SecondCustomException, ponieważ chociaż klasy wynika również bezpośrednio z wyjątkiem, klasa jest zadeklarowany jako publiczny.Klasy trzeciej również nie ognia reguła, ponieważ nie pochodzi bezpośrednio z Exception, SystemException, lub ApplicationException.
using System;
using System.Runtime.Serialization;
namespace Samples
{
// Violates this rule
[Serializable]
internal class FirstCustomException : Exception
{
internal FirstCustomException()
{
}
internal FirstCustomException(string message)
: base(message)
{
}
internal FirstCustomException(string message, Exception innerException)
: base(message, innerException)
{
}
protected FirstCustomException(SerializationInfo info, StreamingContext context)
: base(info, context)
{
}
}
// Does not violate this rule because
// SecondCustomException is public
[Serializable]
public class SecondCustomException : Exception
{
public SecondCustomException()
{
}
public SecondCustomException(string message)
: base(message)
{
}
public SecondCustomException(string message, Exception innerException)
: base(message, innerException)
{
}
protected SecondCustomException(SerializationInfo info, StreamingContext context)
: base(info, context)
{
}
}
// Does not violate this rule because
// ThirdCustomException it does not derive directly from
// Exception, SystemException, or ApplicationException
[Serializable]
internal class ThirdCustomException : SecondCustomException
{
internal ThirdCustomException()
{
}
internal ThirdCustomException(string message)
: base(message)
{
}
internal ThirdCustomException(string message, Exception innerException)
: base(message, innerException)
{
}
protected ThirdCustomException(SerializationInfo info, StreamingContext context)
: base(info, context)
{
}
}
}