Udostępnij za pośrednictwem


Jak utworzyć wyjątki zdefiniowane przez użytkownika z zlokalizowanymi komunikatami wyjątków

W tym artykule dowiesz się, jak utworzyć wyjątki zdefiniowane przez użytkownika, które są 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 niektórych przypadkach, gdy żaden z nich nie spełnia Twoich potrzeb, możesz utworzyć własne wyjątki niestandardowe.

Załóżmy, że chcesz utworzyć obiekt StudentNotFoundException zawierający StudentName właściwość . Aby utworzyć wyjątek niestandardowy, wykonaj następujące kroki:

  1. Utwórz klasę z możliwością serializacji, która dziedziczy z klasy Exception. Nazwa klasy powinna kończyć się ciągiem "Wyjątek":

    [Serializable]
    public class StudentNotFoundException : Exception { }
    
    <Serializable>
    Public Class StudentNotFoundException
        Inherits Exception
    End Class
    
  2. Dodaj konstruktory domyślne:

    [Serializable]
    public class StudentNotFoundException : Exception
    {
        public StudentNotFoundException() { }
    
        public StudentNotFoundException(string message)
            : base(message) { }
    
        public StudentNotFoundException(string message, Exception inner)
            : base(message, inner) { }
    }
    
    <Serializable>
    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
    
  3. Zdefiniuj wszelkie dodatkowe właściwości i konstruktory:

    [Serializable]
    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;
        }
    }
    
    <Serializable>
    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 .dll, który zawiera 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:

  1. Utwórz nowy folder o nazwie Resources w celu przechowywania plików zasobów.

  2. 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.

  3. Dodaj parę nazwa/wartość dla komunikatu o wyjątku, jak pokazano na poniższej ilustracji:

    Add resources to the default culture

  4. Dodaj nowy plik zasobu dla języka francuskiego. Nadaj mu nazwę ExceptionMessages.fr-FR.resx.

  5. Ponownie dodaj parę name/value dla komunikatu o wyjątku, ale z wartością francuską:

    Add resources to the fr-FR culture

  6. Po skompilowania projektu folder wyjściowy kompilacji powinien zawierać folder fr-FR z plikiem .dll , który jest zestawem satelitarnym.

  7. 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 to TestProject.Resources.ExceptionMessages.

Zobacz też