Jak utworzyć wyjątki zdefiniowane przez użytkownika z zlokalizowanymi komunikatami wyjątków
W tym artykule dowiesz się, jak tworzyć wyjątki zdefiniowane przez użytkownika dziedziczone z klasy bazowej Exception z zlokalizowanymi komunikatami wyjątków przy użyciu zestawów satelitarnych.
Tworzenie wyjątków niestandardowych
Platforma .NET zawiera wiele różnych wyjątków, których można użyć. Jednak w przypadkach, gdy żaden z nich nie spełnia Twoich potrzeb, możesz utworzyć własny wyjątek niestandardowy.
Załóżmy, że chcesz utworzyć obiekt StudentNotFoundException
zawierający StudentName
właściwość .
Aby utworzyć wyjątek niestandardowy, wykonaj następujące kroki:
Utwórz klasę dziedziczą z klasy Exception. Nazwa klasy powinna kończyć się ciągiem "Wyjątek":
public class StudentNotFoundException : Exception { }
Public Class StudentNotFoundException Inherits Exception End Class
Dodaj konstruktory domyślne:
public class StudentNotFoundException : Exception { public StudentNotFoundException() { } public StudentNotFoundException(string message) : base(message) { } public StudentNotFoundException(string message, Exception inner) : base(message, inner) { } }
Public Class StudentNotFoundException Inherits Exception Public Sub New() End Sub Public Sub New(message As String) MyBase.New(message) End Sub Public Sub New(message As String, inner As Exception) MyBase.New(message, inner) End Sub End Class
Zdefiniuj wszelkie dodatkowe właściwości i konstruktory:
public class StudentNotFoundException : Exception { public string StudentName { get; } public StudentNotFoundException() { } public StudentNotFoundException(string message) : base(message) { } public StudentNotFoundException(string message, Exception inner) : base(message, inner) { } public StudentNotFoundException(string message, string studentName) : this(message) { StudentName = studentName; } }
Public Class StudentNotFoundException Inherits Exception Public ReadOnly Property StudentName As String Public Sub New() End Sub Public Sub New(message As String) MyBase.New(message) End Sub Public Sub New(message As String, inner As Exception) MyBase.New(message, inner) End Sub Public Sub New(message As String, studentName As String) Me.New(message) StudentName = studentName End Sub End Class
Tworzenie zlokalizowanych komunikatów o wyjątkach
Utworzono wyjątek niestandardowy i możesz zgłosić go w dowolnym miejscu za pomocą kodu podobnego do następującego:
throw new StudentNotFoundException("The student cannot be found.", "John");
Throw New StudentNotFoundException("The student cannot be found.", "John")
Problem z poprzednim wierszem polega na tym, że "The student cannot be found."
jest to tylko ciąg stały. W zlokalizowanej aplikacji chcesz mieć różne komunikaty w zależności od kultury użytkownika.
Zestawy satelitarne są dobrym sposobem, aby to zrobić. Zestaw satelitarny to biblioteka DLL zawierająca zasoby dla określonego języka. Gdy poprosisz o określone zasoby w czasie wykonywania, clR znajdzie ten zasób w zależności od kultury użytkownika. Jeśli dla tej kultury nie zostanie znaleziony żaden zestaw satelitarny, zostaną użyte zasoby kultury domyślnej.
Aby utworzyć zlokalizowane komunikaty wyjątków:
Utwórz nowy folder o nazwie Resources w celu przechowywania plików zasobów.
Dodaj do niego nowy plik zasobu. Aby to zrobić w programie Visual Studio, kliknij prawym przyciskiem myszy folder w Eksplorator rozwiązań, a następnie wybierz polecenie Dodaj>plik zasobów nowego elementu>. Nadaj plikowi nazwę ExceptionMessages.resx. Jest to domyślny plik zasobów.
Dodaj parę nazwa/wartość dla komunikatu o wyjątku, jak pokazano na poniższej ilustracji:
Dodaj nowy plik zasobu dla języka francuskiego. Nadaj mu nazwę ExceptionMessages.fr-FR.resx.
Ponownie dodaj parę name/value dla komunikatu o wyjątku, ale z wartością francuską:
Po skompilowania projektu folder wyjściowy kompilacji powinien zawierać folder fr-FR z plikiem .dll , który jest zestawem satelitarnym.
Zgłaszasz wyjątek z kodem podobny do następującego:
var resourceManager = new ResourceManager("FULLY_QUALIFIED_NAME_OF_RESOURCE_FILE", Assembly.GetExecutingAssembly()); throw new StudentNotFoundException(resourceManager.GetString("StudentNotFound"), "John");
Dim resourceManager As New ResourceManager("FULLY_QUALIFIED_NAME_OF_RESOURCE_FILE", Assembly.GetExecutingAssembly()) Throw New StudentNotFoundException(resourceManager.GetString("StudentNotFound"), "John")
Uwaga
Jeśli nazwa projektu to
TestProject
, a plik zasobu ExceptionMessages.resx znajduje się w folderze Resources projektu, w pełni kwalifikowana nazwa pliku zasobu toTestProject.Resources.ExceptionMessages
.