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 végrehajtott 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ő

Automatikusan implementált tulajdonság deklarálásakor 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 végrehajtott tulajdonságnév, amelyet aláhúzásjel (_) 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 és átadja a kifejezést a Set tulajdonság eljárásának. Az alábbi példakód néhány automatikusan implementált tulajdonságot mutat be, amelyek kezdeti értékeket tartalmaznak.

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

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

Ha egy automatikusan implementált tulajdonságot egy tagként Structuredeklarál, csak akkor inicializálhatja az automatikusan implementált tulajdonságot, ha a tulajdonságot a rendszer a következőképpen jelöli meg Shared.

Ha tömbként deklarál egy automatikusan implementált tulajdonságot, 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 használhat automatikusan implementált tulajdonságot, és ehelyett szabványos vagy kibontott tulajdonságszintaxist 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 Set az Get eljáráshoz. Előfordulhat például, hogy az eljárást és az SetGet eljárást PrivatePublicszeretné 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 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 Get tulajdonság eljárásait és End PropertySet utasításátSet. 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