Ambito di visibilità

domenica 17 agosto 2014 - 13.29
Tag Elenco Tags  VB.NET  |  .NET 4.0

86Marco Profilo | Expert

Buona domenica amici,
vorrei un attimo il Vs supporto circa un ambito di visibilità che credevo aver capito, ma a quanto vedo no! :)

Nello specifico ho una classe MezziDiTrasporto contentente queste proprietà:

Public MustInherit Class MezzoDiTrasporto Private _color As Color Private _KmH As Long Private _lunghezza As Integer Private _larghezza As Integer Private _altezza As Integer Protected Property Colore As Color Get Return _color End Get Set(value As Color) _color = value End Set End Property Public Property KmH As Long Get Return _KmH End Get Set(value As Long) _KmH = value End Set End Property Public Property Lunghezza As Integer Get Return _lunghezza End Get Set(value As Integer) _lunghezza = value End Set End Property Public Property Larghezza As Integer Get Return _larghezza End Get Set(value As Integer) _larghezza = value End Set End Property Public Property Altezza As Integer Get Return _altezza End Get Set(value As Integer) _altezza = value End Set End Property
Ed una classe Automobile. Questa è derivata dalla classe MezziDiTrasporto
Public Class Automobile Inherits MezzoDiTrasporto Private _alimentazione As Tipoalimentazione Public Property Alimentazione As Tipoalimentazione Get Return _alimentazione End Get Set(value As Tipoalimentazione) _alimentazione = value End Set End Property ...

Quello che vi chiedo è la funzionalità dell'ambito di visibilità di Protected (che io sapevo fosse utilizzato per indicare qualsiasi elemento di programmazione visibile SOLO dalla classe base e dalla classe derivata).

Ebbene se voi guardate la prima proprietà di MezziDITrasporto è dichiarata Protected (Property Colore).

Questa proprietà però una volta inzializzata una nuova automobile non la vedo!

Se infatti scrivo:
auto as new MezziDITrasporto.Automobile
la dicitura auto.Colore mi da errore. mentre se utilizzo Public piuttosto che Protected tutto, ovviamente, funziona.

Ma come è possibile? Automobile non è derivata da MEzziDiTrasporto? Per quale motivo non dovrebbe vederla? :)
Mi aiutate? Grazie

0v3rCl0ck Profilo | Guru

Ciao,

le proprietà Protected, come hai detto bene te, possono essere visibili solo dalla classe base e dalle derivate, ma questo non vuol dire che quindi vengono esposte al di fuori della parte di implementazione delle classi, cioè non vengono esposte sull'oggetto istanziato, altrimenti sarebbe semplicemente Public.

se dichiari delle protected, quest'ultime possono essere viste solo all'interno della classe base e della classe derivata, all'interno della loro implementazione, ma una volta istanziata la classe non potrai mai vederle, rimangono comunque variabili a scopo interno, serve per dare la possibilità alle classi derivate di vedere delle proprietà "private" della classe base, perchè ovviamente se fossero dichiarate private non potrebbero essere viste da nessun'altra classe che non fosse la classe padre, quindi hanno introdotto la keywork protected, per dare la possibilità di ereditare e utilizzare campi ad uso interno.

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


Michael Denny | Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5