Sdílet prostřednictvím


Vytvoření uživatelem definovaných výjimek s lokalizovanými zprávami výjimek

V tomto článku se dozvíte, jak vytvořit uživatelem definované výjimky zděděné ze základní Exception třídy s lokalizovanými zprávami výjimek pomocí satelitních sestavení.

Vytváření vlastních výjimek

.NET obsahuje mnoho různých výjimek, které můžete použít. V případech, kdy ale žádný z nich nevyhovuje vašim potřebám, můžete vytvořit vlastní výjimku.

Předpokládejme, že chcete vytvořit StudentNotFoundException vlastnost, která obsahuje StudentName . Pokud chcete vytvořit vlastní výjimku, postupujte takto:

  1. Vytvoření třídy, která dědí z Exception. Název třídy by měl končit výjimkou:

    public class StudentNotFoundException : Exception { }
    
    Public Class StudentNotFoundException
        Inherits Exception
    End Class
    
  2. Přidejte výchozí konstruktory:

    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
    
  3. Definujte další vlastnosti a 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
    

Vytváření lokalizovaných zpráv o výjimce

Vytvořili jste vlastní výjimku a můžete ji vyvolat kdekoli s kódem, jako je následující:

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

Problém s předchozím řádkem je jenom "The student cannot be found." konstantní řetězec. V lokalizované aplikaci chcete mít různé zprávy v závislosti na jazykové verzi uživatele. Satelitní sestavení jsou dobrým způsobem, jak to udělat. Satelitní sestavení je knihovna DLL, která obsahuje prostředky pro určitý jazyk. Když v době běhu požádáte o konkrétní prostředky, modul CLR tento prostředek najde v závislosti na jazykové verzi uživatele. Pokud pro tuto jazykovou verzi nenajde žádné satelitní sestavení, použijí se prostředky výchozí jazykové verze.

Vytvoření lokalizovaných zpráv o výjimce:

  1. Vytvořte novou složku s názvem Prostředky pro uložení souborů prostředků.

  2. Přidejte do něj nový soubor prostředků. Uděláte to tak, že v sadě Visual Studio kliknete pravým tlačítkem na složku v Průzkumník řešení a vyberete Přidat>soubor prostředků nové položky>. Pojmenujte soubor ExceptionMessages.resx. Toto je výchozí soubor prostředků.

  3. Přidejte pár name/value pro zprávu o výjimce, jak je znázorněno na následujícím obrázku:

    Přidání prostředků do výchozí jazykové verze

  4. Přidejte nový soubor prostředků pro francouzštinu. Pojmenujte ji ExceptionMessages.fr-FR.resx.

  5. Znovu přidejte dvojici název/hodnota pro zprávu výjimky, ale s francouzskou hodnotou:

    Přidání prostředků do jazykové verze fr-FR

  6. Po sestavení projektu by výstupní složka sestavení měla obsahovat složku fr-FR se souborem .dll , což je satelitní sestavení.

  7. Vyvoláte výjimku s kódem, jako je následující:

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

    Poznámka:

    Pokud je TestProject název projektu a soubor prostředků ExceptionMessages.resx se nachází ve složce Zdroje projektu, plně kvalifikovaný název souboru zdroje je TestProject.Resources.ExceptionMessages.

Viz také