Share via


Yerelleştirilmiş özel durum iletileriyle kullanıcı tanımlı özel durumlar oluşturma

Bu makalede, uydu derlemelerini kullanarak yerelleştirilmiş özel durum iletileriyle temel Exception sınıftan devralınan kullanıcı tanımlı özel durumlar oluşturmayı öğreneceksiniz.

Özel özel durumlar oluşturma

.NET, kullanabileceğiniz birçok farklı özel durum içerir. Ancak, bazı durumlarda bunların hiçbiri gereksinimlerinizi karşılamadığında kendi özel özel durumlarınızı oluşturabilirsiniz.

Özellik içeren StudentName bir StudentNotFoundException oluşturmak istediğinizi varsayalım. Özel özel durum oluşturmak için şu adımları izleyin:

  1. öğesinden Exceptiondevralan serileştirilebilir bir sınıf oluşturun. Sınıf adı "Özel Durum" ile bitmelidir:

    [Serializable]
    public class StudentNotFoundException : Exception { }
    
    <Serializable>
    Public Class StudentNotFoundException
        Inherits Exception
    End Class
    
  2. Varsayılan oluşturucuları ekleyin:

    [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. Ek özellikleri ve oluşturucuları tanımlayın:

    [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
    

Yerelleştirilmiş özel durum iletileri oluşturma

Özel bir özel durum oluşturdunuz ve bunu aşağıdaki gibi bir kodla herhangi bir yere atabilirsiniz:

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

Önceki satırla ilgili sorun, yalnızca sabit bir dize olmasıdır "The student cannot be found." . Yerelleştirilmiş bir uygulamada, kullanıcı kültürüne bağlı olarak farklı iletilere sahip olmak istersiniz. Uydu derlemeleri bunu yapmak için iyi bir yoldur. Uydu derlemesi, belirli bir dile yönelik kaynakları içeren bir .dll. Çalışma zamanında belirli bir kaynak istediğinizde, CLR bu kaynağı kullanıcı kültürüne bağlı olarak bulur. Bu kültür için hiçbir uydu derlemesi bulunamazsa, varsayılan kültürün kaynakları kullanılır.

Yerelleştirilmiş özel durum iletilerini oluşturmak için:

  1. Kaynak dosyalarını tutmak için Kaynaklar adlı yeni bir klasör oluşturun.

  2. Bu dosyaya yeni bir kaynak dosyası ekleyin. Visual Studio'da bunu yapmak için, Çözüm Gezgini'da klasöre sağ tıklayın ve Yeni Öğe>Kaynakları Dosyası Ekle'yi>seçin. Dosyayı ExceptionMessages.resx olarak adlandırın. Bu, varsayılan kaynaklar dosyasıdır.

  3. Aşağıdaki resimde gösterildiği gibi özel durum iletiniz için bir ad/değer çifti ekleyin:

    Add resources to the default culture

  4. Fransızca için yeni bir kaynak dosyası ekleyin. ExceptionMessages.fr-FR.resx olarak adlandırın.

  5. Özel durum iletisi için yeniden bir ad/değer çifti ekleyin, ancak Fransızca değerle:

    Add resources to the fr-FR culture

  6. Projeyi derledikten sonra derleme çıktı klasörü, uydu derlemesi olan bir .dll dosyası içeren fr-FR klasörünü içermelidir.

  7. Aşağıdaki gibi bir kodla özel durum oluşturursunuz:

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

    Not

    Proje adı ise ve ExceptionMessages.resx kaynak dosyası projenin Resources klasöründe bulunuyorsa, kaynak dosyasının tam adı olurTestProject.Resources.ExceptionMessages.TestProject

Ayrıca bkz.