izlenecek yol: Visual Studio bir nesneyi kalıcı hale getirme (Visual Basic)

Tasarım zamanında bir nesnenin özelliklerini varsayılan değerlere ayarlayabilseniz de, nesne yok edildiğinde çalışma zamanında girilen tüm değerler kaybedilir. Nesneleri, değerleri depolamanızı ve nesnenin bir sonraki açılışında bunları almanızı sağlayan örnekler arasında bir nesnenin verilerini kalıcı hale getirmek için serileştirme kullanabilirsiniz.

Not

Visual Basic, bir ad veya sayı gibi basit verileri depolamak için My.Settings nesnesini kullanabilirsiniz. daha fazla bilgi için bkz. My. Ayarlar nesnesi.

Bu izlenecek yolda basit bir Loan nesne oluşturacak ve verilerini bir dosyaya sürdürmeye devam edersiniz. Daha sonra nesneyi yeniden oluşturduğunuzda dosyadaki verileri buradan alırsınız.

Önemli

Bu örnek, dosya zaten yoksa yeni bir dosya oluşturur. Bir uygulamanın bir dosya oluşturması gerekiyorsa, bu uygulamanın Create klasör için izni olması gerekir. İzinler, erişim denetim listeleri kullanılarak ayarlanır. Dosya zaten varsa, uygulamanın daha az izne sahip yalnızca Write izne ihtiyacı vardır. Mümkün olduğunda, dağıtım sırasında dosyanın oluşturulması ve yalnızca Read tek bir dosyaya (bir klasör için Izin oluşturmak yerine) izin verilmesi daha güvenlidir. Ayrıca, Kullanıcı klasörlerine veri yazmak, kök klasör veya Program Files klasöründen daha güvenlidir.

Önemli

Bu örnek, verileri bir ikili dosya halinde depolar. Bu biçimler, parolalar veya kredi kartı bilgileri gibi hassas veriler için kullanılmamalıdır.

Not

Gördüğünüz iletişim kutuları ve menü komutları, etkin ayarlarınıza ve ürün sürümüne bağlı olarak Yardım menüsünde açıklanana göre farklılık gösterebilir. ayarlarınızı değiştirmek için araçlar menüsünden içeri aktar ve dışarı aktar Ayarlar ' a tıklayın. daha fazla bilgi için bkz. Visual Studio ıde 'yi kişiselleştirme.

Kredi nesnesi oluşturma

İlk adım, sınıfını Loan kullanan bir sınıf ve test uygulaması oluşturmaktır.

Kredi sınıfı oluşturmak için

  1. Yeni bir sınıf kitaplığı projesi oluşturun ve "Kreclass" olarak adlandırın. Daha fazla bilgi için bkz. çözüm ve proje oluşturma.

  2. Çözüm Gezgini, Class1 dosyası için kısayol menüsünü açın ve Yeniden Adlandır' ı seçin. Dosyayı olarak yeniden adlandırın Loan ve ENTER 'a basın. Dosyanın yeniden adlandırılması de sınıfı olarak yeniden adlandırılacaktır Loan .

  3. Sınıfına aşağıdaki ortak üyeleri ekleyin:

    Public Class Loan  
        Implements System.ComponentModel.INotifyPropertyChanged  
    
        Public Property LoanAmount As Double  
        Public Property InterestRate As Double  
        Public Property Term As Integer  
    
        Private p_Customer As String  
        Public Property Customer As String  
            Get  
                Return p_Customer  
            End Get  
            Set(ByVal value As String)  
                p_Customer = value  
                RaiseEvent PropertyChanged(Me,  
                  New System.ComponentModel.PropertyChangedEventArgs("Customer"))  
            End Set  
        End Property  
    
        Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler _  
          Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged  
    
        Public Sub New(ByVal loanAmount As Double,  
                       ByVal interestRate As Double,  
                       ByVal term As Integer,  
                       ByVal customer As String)  
    
            Me.LoanAmount = loanAmount  
            Me.InterestRate = interestRate  
            Me.Term = term  
            p_Customer = customer  
        End Sub  
    End Class  
    

Ayrıca, sınıfını kullanan basit bir uygulama da oluşturmanız gerekecektir Loan .

Test uygulaması oluşturmak için

  1. çözümünüze Windows Forms bir uygulama projesi eklemek için dosya menüsünde ekle,yeni Project öğesini seçin.

  2. yeni Project ekle iletişim kutusunda, Windows Forms uygulama' yı seçin ve LoanApp projenin adı olarak girin ve ardından iletişim kutusunu kapatmak için tamam ' ı tıklatın.

  3. Çözüm Gezgini, kremi uygulama projesini seçin.

  4. Project menüsünde, başlangıç Project olarak ayarla' yı seçin.

  5. Project menüsünde başvuru ekle' yi seçin.

  6. Başvuru Ekle iletişim kutusunda, Projeler sekmesini seçin ve sonra ödünç sınıfı projesini seçin.

  7. Tamam’a tıklayarak iletişim kutusunu kapatın.

  8. Tasarımcıda, forma dört denetim ekleyin TextBox .

  9. Kod Düzenleyicisi'ne şu kodu ekleyin:

    Private WithEvents TestLoan As New LoanClass.Loan(10000.0, 0.075, 36, "Neil Black")  
    
    Private Sub Form1_Load() Handles MyBase.Load  
        TextBox1.Text = TestLoan.LoanAmount.ToString  
        TextBox2.Text = TestLoan.InterestRate.ToString  
        TextBox3.Text = TestLoan.Term.ToString  
        TextBox4.Text = TestLoan.Customer  
    End Sub  
    
  10. PropertyChangedAşağıdaki kodu kullanarak forma olay işleyicisi ekleyin:

    Public Sub CustomerPropertyChanged(  
          ByVal sender As Object,  
          ByVal e As System.ComponentModel.PropertyChangedEventArgs  
        ) Handles TestLoan.PropertyChanged  
    
        MsgBox(e.PropertyName & " has been changed.")  
    End Sub  
    

Bu noktada, uygulamayı derleyip çalıştırabilirsiniz. Sınıfın varsayılan değerlerinin Loan metin kutularında göründüğünü unutmayın. 7,5 olan faiz oranı değerini 7,1 olarak değiştirmeyi deneyin ve sonra uygulamayı kapatıp yeniden çalıştırın. değer varsayılan olarak 7,5 ' ye döner.

Gerçek dünyada, faiz oranları düzenli aralıklarla değişir, ancak uygulama her çalıştırıldığında her zaman gerekli değildir. Uygulamanın her çalıştığında, kullanıcının faiz oranını güncelleştirmesini sağlamak yerine, uygulamanın örnekleri arasındaki en son faiz oranını korumak daha iyidir. Bir sonraki adımda, yalnızca kredi sınıfına serileştirme ekleyerek bunu yapacaksınız.

Nesneyi kalıcı hale getirmek için serileştirme kullanma

Kredi sınıfının değerlerini kalıcı hale getirmek için, önce sınıfı özniteliğiyle işaretlemeniz gerekir Serializable .

Bir sınıfı seri hale getirilebilir olarak işaretlemek için

  • Kredi sınıfının sınıf bildirimini aşağıdaki gibi değiştirin:

    <Serializable()>  
    Public Class Loan  
    

SerializableÖzniteliği derleyiciye sınıftaki her şeyin bir dosyaya kalıcı olarak devam edebilir olduğunu söyler. PropertyChangedolay bir Windows Form nesnesi tarafından işlendiği için serileştirilemiyor. NonSerializedÖzniteliği kalıcı olmaması gereken sınıf üyelerini işaretlemek için kullanılabilir.

Bir üyenin serileştirilmesine engel olmak için

  • PropertyChangedOlay bildirimini aşağıdaki gibi değiştirin:

    <NonSerialized()>  
    Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler _  
      Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged  
    

Sonraki adım, ödünç uygulama uygulamasına serileştirme kodu eklemektir. Sınıfını seri hale getirmek ve bir dosyaya yazmak için, System.IO ve System.Xml.Serialization ad alanlarını kullanırsınız. Tam nitelikli adları yazmadan kaçınmak için, gerekli sınıf kitaplıklarına başvurular ekleyebilirsiniz.

Ad alanlarına başvurular eklemek için

  • Aşağıdaki deyimlerini sınıfının üst kısmına ekleyin Form1 :

    Imports System.IO  
    Imports System.Runtime.Serialization.Formatters.Binary  
    

    Bu durumda, nesneyi ikili bir biçimde kaydetmek için ikili bir biçimlendirici kullanıyorsunuz.

Sonraki adım, nesne oluşturulduğunda nesnenin serisini kaldırmak için kod eklemektir.

Bir nesnenin serisini kaldırmak için

  1. Seri hale getirilen verilerin dosya adı için sınıfa bir sabit ekleyin.

    Const FileName As String = "..\..\SavedLoan.bin"  
    
  2. Form1_LoadOlay yordamındaki kodu aşağıdaki gibi değiştirin:

    Private WithEvents TestLoan As New LoanClass.Loan(10000.0, 0.075, 36, "Neil Black")  
    
    Private Sub Form1_Load() Handles MyBase.Load  
        If File.Exists(FileName) Then  
            Dim TestFileStream As Stream = File.OpenRead(FileName)  
            Dim deserializer As New BinaryFormatter  
            TestLoan = CType(deserializer.Deserialize(TestFileStream), LoanClass.Loan)  
            TestFileStream.Close()  
        End If  
    
        AddHandler TestLoan.PropertyChanged, AddressOf Me.CustomerPropertyChanged  
    
        TextBox1.Text = TestLoan.LoanAmount.ToString  
        TextBox2.Text = TestLoan.InterestRate.ToString  
        TextBox3.Text = TestLoan.Term.ToString  
        TextBox4.Text = TestLoan.Customer  
    End Sub  
    

    Önce dosyanın var olduğunu denetlemeniz gerektiğini unutmayın. Varsa, Stream ikili dosyayı okumak için bir sınıf ve BinaryFormatter dosyayı çevirecek bir sınıf oluşturun. Akış türünden kredi nesne türüne de dönüştürmeniz gerekir.

Sonra, metin kutularına girilen verileri sınıfa kaydetmek için kod eklemeniz gerekir Loan ve ardından sınıfı bir dosyaya serileştirilmelidir.

Verileri kaydetmek ve sınıfı seri hale getirmek için

  • Olay yordamına aşağıdaki kodu ekleyin Form1_FormClosing :

    Private Sub Form1_FormClosing() Handles MyBase.FormClosing  
        TestLoan.LoanAmount = CDbl(TextBox1.Text)  
        TestLoan.InterestRate = CDbl(TextBox2.Text)  
        TestLoan.Term = CInt(TextBox3.Text)  
        TestLoan.Customer = TextBox4.Text  
    
        Dim TestFileStream As Stream = File.Create(FileName)  
        Dim serializer As New BinaryFormatter  
        serializer.Serialize(TestFileStream, TestLoan)  
        TestFileStream.Close()  
    End Sub  
    

Bu noktada, uygulamayı derleyip çalıştırabilirsiniz. Başlangıçta, varsayılan değerler metin kutularında görünür. Değerleri değiştirmeyi deneyin ve dördüncü metin kutusuna bir ad girin. Uygulamayı kapatın ve sonra yeniden çalıştırın. Yeni değerlerin artık metin kutularında göründüğünü unutmayın.

Ayrıca bkz.