Newsgroup: it.comp.lang.visual-basic
Titolo: Nascondere tutti i metodi della classe base, possibile???

Volevo sapere se era possibile nascondere tutti i metodi di una classe
base in una classe ereditata.
Mi spiego meglio, questa è la classe che voglio sviluppare :
Imports System.Windows.Forms
Public Class Messaggi ' la classe che voglio creare
    Public Sub mostra(ByVal mess As String)  ' definisco un metodo mio
        Label1.Text = mess
        Me.ShowDialog()
    End Sub
    Private Sub showDialog()  ' In questo modo nascondo il metodo della
classe base
    End Sub
End Class
Oltre a nascondere questo metodo voglio nascondere tutti i metodi che
la classe Messaggi (essendo una Form) eredita.
E' possibile farlo senza scrivere una sub privata per ogni metodo.
Grazie

mirror wrote:

Non puoi nascondere un membro di una classe base perchè questo vìola i 
principi della OOP.
Quindi, o la tua classe in realtà NON è un form (e quindi non ha i membri 
esposti dalle form) o stai sbagliando qualcosa nella tua progettazione.
Se la tua classe deve esporre solo i tuoi metodi ricorri all'incapsulamento 
(dichiari una var privata del form base e richiami la ShowDialog di quella).
Ciao 

Fabio ha scritto:

Grazie della risposta,
molto utile.
Credo che utilizzarò l'incapsulamento anche se questo mi costringerà
ad utilizzare due classi.
La classe Messaggi è una form, è una classe a se e non solo una
variabile della seconda classe, in questo modo posso utilizzare
l'editor visuale per disegnarla.
Poi creerò una seconda classe che avrà un campo privato di tipo
Messaggi.
Public Class Messaggi
     Public Sub mostra(ByVal mess As String)  ' definisco un metodo mio
         Label1.Text = mess
         Me.ShowDialog()
     End Sub
End Class
Public Class DialogMessaggi
   private mss as New Messaggi
     Private Sub showDialog(ByVal mess As String)
          mss.mostra(mess)
     End Sub
end Class
E' questa la soluzione che mi hai suggerito, giusto?

 E' questa la soluzione che mi hai suggerito, giusto?
Sě, esatto.
Forse in Messaggi ridefinirei un overload di ShowDialog cosě:
Public Overloads Sub ShowDialog(Byval message As String)
    Label1.Text = message
    Me.ShowDialog()
End Sub
Non so perchč la chiami ShowDialog in DialogMessaggi e Mostra nel form.
Per coerenza se il form mostra 1 solo messaggio alla volta lo chiamerei 
MessaggioForm (o MessageForm, per mantenere tutto nella stessa lingua) e lo 
stesso per la DialogMessaggi, che seguendo le naming conventions dovrebbe 
chiamarsi qualcosa come MessaggioModale.
Se DialogMessaggi ha solo quel metodo forse ti comviene dichiararlo Shared 
cosě:
Public Class DialogMessaggi
    Private Shared Sub showDialog(ByVal mess As String)
        Dim msg As New Messaggio
        msg.ShowDialog(mess)
        msg.Dispose()
    End Sub
end Class
In modo che tu possa fare
DialogMessaggi.ShowDialog("messaggio")
senza creare l'istanza della classe.
E visto cosě nominerei il tutto
Messaggio.Mostra(string)
Per la nomenclatura degli oggetti e il casing dei nomi di classi e metodi ti 
rimanderei a questo:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/cpconnamingguidelines.asp
e in generale
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/cpconnetframeworkdesignguidelines.asp
Ciao

 Ciao
Sei stato di grande aiuto.
Grazie. :)