Share via


Nasıl yapılır: Farklı Veri Türlerinde Aynı İşlevselliği Sağlayabilen Bir Sınıf Tanımlama (Visual Basic)

Farklı veri türlerinde aynı işlevselliği sağlayan nesneler oluşturabileceğiniz bir sınıf tanımlayabilirsiniz. Bunu yapmak için tanımda bir veya daha fazla tür parametresi belirtirsiniz. Sınıf daha sonra çeşitli veri türlerini kullanan nesneler için şablon olarak görev yapabilir. Bu şekilde tanımlanan bir sınıf genel sınıf olarak adlandırılır.

Genel bir sınıf tanımlamanın avantajı, bunu yalnızca bir kez tanımlamanız ve kodunuzun bunu kullanarak çok çeşitli veri türleri kullanan birçok nesne oluşturmasıdır. Bu, sınıfı türüyle tanımlamaktan daha iyi performansa neden olur Object .

Sınıflara ek olarak, genel yapıları, arabirimleri, yordamları ve temsilcileri de tanımlayabilir ve kullanabilirsiniz.

Tür parametresine sahip bir sınıf tanımlamak için

  1. Sınıfı normal şekilde tanımlayın.

  2. Tür parametresini belirtmek için sınıf adından hemen sonra tür parametresi ekleyin(Of.)

  3. Birden fazla tür parametreniz varsa, parantez içinde virgülle ayrılmış bir liste yapın. Anahtar sözcüğünü Of yinelemeyin.

  4. Kodunuz basit atama dışında bir tür parametresinde işlemler gerçekleştiriyorsa, bir veya daha fazla kısıtlama eklemek için yan As tümcesi ile bu tür parametresini izleyin. Kısıtlama, bu tür parametresi için sağlanan türün aşağıdaki gibi bir gereksinimi karşıladığını garanti eder:

    • Kodunuzun gerçekleştirdiği gibi >bir işlemi destekler

    • Kodunuzun eriştiği yöntem gibi bir üyeyi destekler

    • Parametresiz oluşturucuyu kullanıma sunar

    Herhangi bir kısıtlama belirtmezseniz, kodunuzun kullanabileceği tek işlemler ve üyeler Nesne Veri Türü tarafından desteklenen işlemlerdir. Daha fazla bilgi için bkz . Tür Listesi.

  5. Sağlanan bir türle bildirilecek her sınıf üyesini belirleyin ve bildirin Astypeparameter. Bu, iç depolama, yordam parametreleri ve dönüş değerleri için geçerlidir.

  6. Kodunuzun yalnızca sağlayabildiği herhangi bir veri türü tarafından desteklenen işlemleri ve yöntemleri kullandığına itemTypeemin olun.

    Aşağıdaki örnek, çok basit bir listeyi yöneten bir sınıfı tanımlar. İç dizisinde itemslisteyi tutar ve kullanan kod, liste öğelerinin veri türünü bildirebilir. Parametreli oluşturucu, kullanma kodunun üst sınırlarını itemsayarlamasına olanak tanır ve parametresiz oluşturucu bunu 9 olarak ayarlar (toplam 10 öğe için).

    Public Class simpleList(Of itemType)
      Private items() As itemType
      Private top As Integer
      Private nextp As Integer
      Public Sub New()
        Me.New(9)
      End Sub
      Public Sub New(ByVal t As Integer)
        MyBase.New()
        items = New itemType(t) {}
        top = t
        nextp = 0
      End Sub
      Public Sub add(ByVal i As itemType)
        insert(i, nextp)
      End Sub
      Public Sub insert(ByVal i As itemType, ByVal p As Integer)
        If p > nextp OrElse p < 0 Then
          Throw New System.ArgumentOutOfRangeException("p", 
            " less than 0 or beyond next available list position")
        ElseIf nextp > top Then
          Throw New System.ArgumentException("No room to insert at ", 
            "p")
        ElseIf p < nextp Then
          For j As Integer = nextp To p + 1 Step -1
            items(j) = items(j - 1)
          Next j
        End If
        items(p) = i
        nextp += 1
      End Sub
      Public Sub remove(ByVal p As Integer)
        If p >= nextp OrElse p < 0 Then
            Throw New System.ArgumentOutOfRangeException("p", 
                " less than 0 or beyond last list item")
        ElseIf nextp = 0 Then
            Throw New System.ArgumentException("List empty; cannot remove ", 
                "p")
        ElseIf p < nextp - 1 Then
            For j As Integer = p To nextp - 2
                items(j) = items(j + 1)
            Next j
        End If
        nextp -= 1
      End Sub
      Public ReadOnly Property listLength() As Integer
        Get
          Return nextp
        End Get
      End Property
      Public ReadOnly Property listItem(ByVal p As Integer) As itemType
        Get
          If p >= nextp OrElse p < 0 Then
            Throw New System.ArgumentOutOfRangeException("p", 
              " less than 0 or beyond last list item")
            End If
          Return items(p)
        End Get
      End Property
    End Class
    

    'den simpleList bir sınıf bildirerek bir değer listesini tutabilir, bir değer listesini IntegerString tutmak için başka bir sınıf ve değerleri tutmak Date için başka bir sınıf bildirebilirsiniz. Liste üyelerinin veri türü dışında, tüm bu sınıflardan oluşturulan nesneler aynı şekilde davranır.

    Kullanan kodun sağladığı itemType tür bağımsız değişkeni, veya Doublegibi Boolean bir iç tür, bir yapı, bir numaralandırma veya uygulamanızın tanımladığı bir tür de dahil olmak üzere herhangi bir sınıf türü olabilir.

    Sınıfı simpleList aşağıdaki kodla test edebilirsiniz.

    Public Sub useSimpleList()
      Dim iList As New simpleList(Of Integer)(2)
      Dim sList As New simpleList(Of String)(3)
      Dim dList As New simpleList(Of Date)(2)
      iList.add(10)
      iList.add(20)
      iList.add(30)
      sList.add("First")
      sList.add("extra")
      sList.add("Second")
      sList.add("Third")
      sList.remove(1)
      dList.add(#1/1/2003#)
      dList.add(#3/3/2003#)
      dList.insert(#2/2/2003#, 1)
      Dim s = 
        "Simple list of 3 Integer items (reported length " &
         CStr(iList.listLength) & "):" &
         vbCrLf & CStr(iList.listItem(0)) &
         vbCrLf & CStr(iList.listItem(1)) &
         vbCrLf & CStr(iList.listItem(2)) &
         vbCrLf &
         "Simple list of 4 - 1 String items (reported length " &
         CStr(sList.listLength) & "):" &
         vbCrLf & CStr(sList.listItem(0)) &
         vbCrLf & CStr(sList.listItem(1)) &
         vbCrLf & CStr(sList.listItem(2)) &
         vbCrLf &
         "Simple list of 2 + 1 Date items (reported length " &
         CStr(dList.listLength) & "):" &
         vbCrLf & CStr(dList.listItem(0)) &
         vbCrLf & CStr(dList.listItem(1)) &
         vbCrLf & CStr(dList.listItem(2))
      MsgBox(s)
    End Sub
    

Ayrıca bkz.