Share via


Door de gebruiker gedefinieerde uitzonderingen maken met gelokaliseerde uitzonderingsberichten

In dit artikel leert u hoe u door de gebruiker gedefinieerde uitzonderingen maakt die worden overgenomen van de basisklasse Exception met gelokaliseerde uitzonderingsberichten met behulp van satellietassembly's.

Aangepaste uitzonderingen maken

.NET bevat veel verschillende uitzonderingen die u kunt gebruiken. In sommige gevallen kunt u echter uw eigen aangepaste uitzonderingen maken wanneer ze niet aan uw behoeften voldoen.

Stel dat u een StudentNotFoundException eigenschap wilt maken die een StudentName eigenschap bevat. Volg deze stappen om een aangepaste uitzondering te maken:

  1. Maak een serialiseerbare klasse die wordt overgenomen van Exception. De klassenaam moet eindigen op 'Uitzondering':

    [Serializable]
    public class StudentNotFoundException : Exception { }
    
    <Serializable>
    Public Class StudentNotFoundException
        Inherits Exception
    End Class
    
  2. Voeg de standaardconstructors toe:

    [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. Definieer eventuele aanvullende eigenschappen en constructors:

    [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
    

Gelokaliseerde uitzonderingsberichten maken

U hebt een aangepaste uitzondering gemaakt en u kunt deze overal met code genereren, zoals de volgende:

throw new StudentNotFoundException("The student cannot be found.", "John");
Throw New StudentNotFoundException("The student cannot be found.", "John")

Het probleem met de vorige regel is dat "The student cannot be found." alleen een constante tekenreeks is. In een gelokaliseerde toepassing wilt u verschillende berichten hebben, afhankelijk van de gebruikerscultuur. Satellietassembly's zijn een goede manier om dat te doen. Een satellietassembly is een .dll die bronnen voor een specifieke taal bevat. Wanneer u tijdens runtime om specifieke resources vraagt, vindt de CLR die resource, afhankelijk van de gebruikerscultuur. Als er geen satellietassembly voor die cultuur wordt gevonden, worden de bronnen van de standaardcultuur gebruikt.

De gelokaliseerde uitzonderingsberichten maken:

  1. Maak een nieuwe map met de naam Resources om de resourcebestanden op te slaan.

  2. Voeg er een nieuw resourcebestand aan toe. Klik hiervoor in Visual Studio met de rechtermuisknop op de map in Solution Explorer en selecteer Nieuw itembronnenbestand> toevoegen.> Geef het bestand de naam ExceptionMessages.resx. Dit is het standaardbronnenbestand.

  3. Voeg een naam/waardepaar toe voor uw uitzonderingsbericht, zoals in de volgende afbeelding:

    Add resources to the default culture

  4. Voeg een nieuw resourcebestand toe voor Frans. Noem deze ExceptionMessages.fr-FR.resx.

  5. Voeg opnieuw een naam/waardepaar toe voor het uitzonderingsbericht, maar met een Franse waarde:

    Add resources to the fr-FR culture

  6. Nadat u het project hebt gemaakt, moet de map build-uitvoer de fr-FR-map bevatten met een .dll-bestand , de satellietassembly.

  7. U genereert de uitzondering met code als de volgende:

    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")
    

    Notitie

    Als de projectnaam is TestProject en het resourcebestand ExceptionMessages.resx zich in de map Resources van het project bevindt, is TestProject.Resources.ExceptionMessagesde volledig gekwalificeerde naam van het resourcebestand.

Zie ook