Tutti dicono di pensare ad una classe come ad "un insieme di oggetti"
No, cercando dei paragoni col mondo reale, la classe è come il progetto di un'automobile, l'oggetto è l'automobile vera e propria. Per creare un'automobile devi prima progettarla, definendone diversi aspetti (proprietà, metodi ed eventi). Una volta che il progetto è completo potrò portarlo in fabbrica e realizzare migliaia di automobili identiche, che varieranno tra loro grazie alle proprietà che ho deciso di implementare (colore, cilindrata, clima si/no, ecc.). Tornando al mondo informatico, quando creo un oggetto da una classe si dice che creo una nuova "istanza" della classe, che rende funzionanti i concetti progettati nella classe.

Una volta che hai capito questo sistema di ragionamento, diventerà più facile comprendere tutto il resto della programmazione ad oggetti. La tua difficoltà, se non ho capito male, è quella di calare questi concetti alla programmazione reale. Facciamo un esempio reale, immagina di dover scrivere un software che calcoli area e perimetro di alcuni poligoni regolari. Con la programmazione procedurale tradizionale, potrei scrivere:
codice:
Function Area(nlati As Integer, lato As Integer) As Integer
    'algoritmo di calcolo dell'area
    '...
End Function

Function Perimetro(nlati As Integer, lato As Integer) As Integer
    '...
End Function
Con la programmazione ad oggetti, mi sforzo di descrivere il poligono regolare con una classe:
codice:
Public Class Poligono
    Private nlati As Integer
    Private lato As Integer

    Public Property NumeroLati() As Integer
        'legge e scrive nella variabile nlati
    End Property

    Public Property LunghezzaLato() As Integer
        'legge e scrive nella variabile lato
    End Property

    'costruttore
    Public Sub New(numlati As Integer, lunglato As Integer)
        nlati = numlati
        lato = lunglato
    End Sub

    Public Function Area() As Integer
        '....
    End Function

    Public Function Perimetro() As Integer
        '....
    End Function
End Class
Una volta definita questa classe, per utilizzarla dovrò scrivere:
codice:
Dim poligono1 As Poligono

'creo una istanza della classe Poligono - un triangolo lato 10
poligono1 = New Poligono(3, 10)

'stampo su console l'area e il perimetro
Console.WriteLine(poligono1.Area())
Console.WriteLine(poligono1.Perimetro())