17

Podczas projektowania niestandardowych wyjątków dla .NET, MSDN zapewnia these guidelines. W szczególności, z wytycznymi, które zwyczaj wyjątek:Implementowanie niestandardowych wyjątków w przenośnej bibliotece klas

  • należy serializacji, to realizować ISerializable i być ozdobione atrybutu [Serializable] i
  • powinien realizować (de) konstruktora szeregowania, tj protected CustomException(SerializationInfo info, StreamingContext context).

Jednak w Portable Class Library Żaden z SerializableAttribute, ISerializable i SerializationInfo są obsługiwane.

W jaki sposób należy zaprojektować niestandardowy wyjątek w bibliotece klas przenośnych, która jednocześnie jest przeznaczona dla platformy .NET Framework i jednej lub wielu platform?

Odpowiedz

17

Zasadniczo, zignoruj ​​to wytyczne - to jest dla pełnego .NET i nie dotyczy przenośnych projektów bibliotek klasowych. Rzeczywiście, jeśli patrzymy na (powiedzmy) Silverlight (która obejmuje WP7) widzimy:

[ClassInterfaceAttribute(ClassInterfaceType.None)] 
[ComVisibleAttribute(true)] 
public class Exception 

Szczerze mówiąc, głównym konsumentem tego wymogu było remoting ... a to nie jest ogromne zapotrzebowanie teraz.

+0

Wielkie dzięki za wyjaśnienia, Marc. Podejrzewałem, że tak właśnie było (wskazówki nie zostały zaktualizowane na przykład dla .NET 4.5), ale czuję się bardziej pewny uzyskania potwierdzenia z wiarygodnego źródła. –

+1

@Asoby Dodałem kilka uwag do sekcji "Treści społeczności" - mogą się one pojawić w pewnym momencie. –

+1

Niektóre z nich są egzekwowane w czasie wykonywania. Na przykład, jeśli spróbujesz dodać coś do kolekcji Exception.Data, rzuci wyjątek na pełną strukturę, ale nie na Silverlight. –