Megosztás a következőn keresztül:


Automatikusan implementált tulajdonságok (Visual Basic)

Az automatikusan implementált tulajdonságok lehetővé teszik egy osztály tulajdonságának gyors megadását anélkül, hogy kódot kellene írnia a tulajdonsághoz GetSet . Amikor kódot ír egy automatikusan implementált tulajdonsághoz, a Visual Basic fordító automatikusan létrehoz egy privát mezőt a tulajdonságváltozó tárolásához a társított Get és Set eljárások létrehozása mellett.

Az automatikusan implementált tulajdonságok esetén egy tulajdonság, beleértve az alapértelmezett értéket is, egyetlen sorban deklarálható. Az alábbi példa három tulajdonságdeklarációt mutat be.

Public Property Name As String
Public Property Owner As String = "DefaultName"
Public Property Items As New List(Of String) From {"M", "T", "W"}
Public Property ID As New Guid()

Az automatikusan implementált tulajdonság egyenértékű azzal a tulajdonságsal, amelynek tulajdonságértékét egy privát mezőben tárolja a rendszer. Az alábbi példakód egy automatikusan implementált tulajdonságot mutat be.

Property Prop2 As String = "Empty"

Az alábbi példakód az előző automatikusan megvalósított tulajdonság példájának megfelelő kódot mutatja be.

Private _Prop2 As String = "Empty"
Property Prop2 As String
    Get
        Return _Prop2
    End Get
    Set(ByVal value As String)
        _Prop2 = value
    End Set
End Property

Az alábbi kód az olvasható tulajdonságok implementálását mutatja be:

Class Customer  
   Public ReadOnly Property Tags As New List(Of String)  
   Public ReadOnly Property Name As String = ""  
   Public ReadOnly Property File As String  
  
   Sub New(file As String)  
      Me.File = file  
   End Sub  
End Class  

A tulajdonsághoz a példában látható inicializálási kifejezésekkel rendelhet hozzá, vagy hozzárendelheti a tulajdonságokhoz a típus konstruktorában. Bármikor hozzárendelheti az olvasható tulajdonságok háttérmezőihez.

Háttérmező

Ha automatikusan implementált tulajdonságot deklarál, a Visual Basic automatikusan létrehoz egy rejtett, háttérmezőnek nevezett privát mezőt, amely tartalmazza a tulajdonság értékét. A háttérmező neve az automatikusan implementált tulajdonságnév, amelyet aláhúzás (_) előz meg. Ha például egy automatikusan implementált tulajdonságot IDdeklarál, a háttérmező neve el lesz nevezve _ID. Ha az osztály egyik tagját is elnevezi _ID, elnevezési ütközést okoz, és a Visual Basic fordítási hibát jelez.

A háttérmező a következő jellemzőkkel is rendelkezik:

  • A háttérmező hozzáférési módosítója mindig Privateaz , még akkor is, ha maga a tulajdonság más hozzáférési szinttel rendelkezik, például Public.

  • Ha a tulajdonság meg van jelölve, Shareda háttérmező is meg van osztva.

  • A tulajdonsághoz megadott attribútumok nem vonatkoznak a háttérmezőre.

  • A háttérmező az osztályon belüli kódból és a hibakeresési eszközökből, például a Figyelő ablakból érhető el. A háttérmező azonban nem jelenik meg az IntelliSense szókiegészítési listájában.

Automatikusan implementált tulajdonság inicializálása

A mezők inicializálására használható kifejezések érvényesek az automatikusan implementált tulajdonság inicializálására. Az automatikusan implementált tulajdonság inicializálásakor a rendszer kiértékeli a kifejezést, és átadja a Set tulajdonság eljárásának. Az alábbi példakódok a kezdeti értékeket tartalmazó, automatikusan implementált tulajdonságokat mutatják be.

Property FirstName As String = "James"
Property PartNo As Integer = 44302
Property Orders As New List(Of Order)(500)

Nem inicializálhat automatikusan implementált tulajdonságot, amely egy Interface, vagy egy megjelölt MustOverridetulajdonság tagja.

Ha egy automatikusan implementált tulajdonságot deklarál egy Structuretagként, csak akkor inicializálhatja az automatikusan implementált tulajdonságot, ha az a következőképpen van megjelölve Shared.

Ha egy automatikusan implementált tulajdonságot tömbként deklarál, nem adhat meg explicit tömbkorlátokat. Az értékeket azonban tömb inicializálóval is megadhatja, ahogyan az alábbi példákban is látható.

Property Grades As Integer() = {90, 73}
Property Temperatures As Integer() = New Integer() {68, 54, 71}

Standard szintaxist igénylő tulajdonságdefiníciók

Az automatikusan implementált tulajdonságok kényelmesek, és számos programozási forgatókönyvet támogatnak. Vannak azonban olyan helyzetek, amikor nem lehet automatikusan implementált tulajdonságot használni, és ehelyett szabványos vagy kibontott tulajdonságszintaxisokat kell használnia.

Ha az alábbiak valamelyikét szeretné elvégezni, bővített tulajdonságdefiníciós szintaxist kell használnia:

  • Adjon hozzá kódot egy Get tulajdonsághoz vagy Set eljáráshoz, például kódot a bejövő értékek ellenőrzéséhez az Set eljárásban. Előfordulhat például, hogy a tulajdonságérték beállítása előtt ellenőrizni szeretné, hogy egy telefonszámot jelölő sztring tartalmazza-e a szükséges számokat.

  • Adjon meg különböző kisegítő lehetőségeket az eljáráshoz és Get az Set eljáráshoz. Előfordulhat például, hogy az eljárást és az SetPrivate eljárást GetPublicszeretné elvégezni.

  • Hozzon létre tulajdonságokat.WriteOnly

  • Használjon paraméteres tulajdonságokat (a tulajdonságokat is beleértve Default ). A tulajdonság paraméterének megadásához vagy az eljárás további paramétereinek megadásához deklarálnia kell egy kibontott tulajdonságot Set .

  • Helyezzen egy attribútumot a háttérmezőre, vagy módosítsa a háttérmező hozzáférési szintjét.

  • Adjon meg XML-megjegyzéseket a háttérmezőhöz.

Automatikusan implementált tulajdonság kibontása

Ha egy automatikusan implementált tulajdonságot egy olyan kibontott tulajdonsággá kell konvertálnia, amely egy vagy több Get eljárást tartalmaz, a Visual Basic Code Editor automatikusan létrehozhatja a Set tulajdonság eljárásait és GetSet utasítását.End Property A kód akkor jön létre, ha a kurzort az utasítást követő Property üres sorba helyezi, írja be G a (for Get) vagy egy S (for Set) kifejezést, és nyomja le az ENTER billentyűt. A Visual Basic Code Editor automatikusan létrehozza az GetSet írásvédett és írásvédett tulajdonságokat, amikor az ENTER billentyűt lenyomja egy Property utasítás végén.

Lásd még