Public - видимость членов класса внутри и вне класса для его экземпляров.
Private - видимо тока внутри класса.
Shared - объявление членов для всех экземпляров, т.е. общих.
Например допустим что у нас есть класс, описывающий данные отдельного человека:
Public Class Person
Public Name As String
Public Email As String
End Class
Можно создать два экземпляра для двух разных людей и не Shared поля будут предоставлять различные данные для каждого из них:
Dim Person1 As Person = New Person ()
Person1.Name = "Лit}{Ъ"
Person1.Email = "Лit}{Ъ@blabla.ru"
Dim Person2 As Person = New Person ()
Person2.Name = "PAX"
Person2.Email = "[email protected]"
Допустим теперь, что класс Person имеет общедоступный метод, к которому можно обращаться без создания экземпляров этого класса. Например представим, что у нас есть база данных с уже сохраненными этими двумя людьми, описанными выше. И есть метод, который из базы данных может по электронному адресу человека создать экземпляр записи базы данных со всеми заполненными полями. Выглядело бы это следующим образом:
Public Class Person
Public Name As String
Public Email As String
Public Shared Function GetPersonFromDB(email As String) As Person
Dim Person1 As Person = New Person ()
' далее поиск по базе данных
'...
' назначение полей
Person1.Name = dataRow["Name"].ToString()
Person1.Email = dataRow["Email"].ToString()
Return Person1
End Function
End Class
А использование уже где-то из вне можно было бы выполнить следующим образом:
Dim Person1 As Person = Person.GetPersonFromDB("Лit}{Ъ@blabla.ru")
Dim Person2 As Person = Person.GetPersonFromDB("[email protected]")
Т.е. работать уже с функцией самого класса, а не с его экземпляром.
Надеюсь объяснить смог )))