Вы можете сделать приватный конструктор в B:
Private Sub New()
End Sub
Если нет общественных конструкторов, это будет блокировать вас от написания кода, как этого никуда, но в самой B:
Dim objectB as new B
Однако это требует вы должны написать код, подобный этому, где-нибудь в B, или вы не сможете когда-либо создать экземпляр B в любом месте. Как правило, совместно используемый метод является местом, чтобы сделать это:
Friend Shared Function Create() As B
'...
Return New B
End Function
Примечание модификатор Friend
доступа. Теперь, если у вас есть сборка (проект библиотеки классов), содержащая только A и B, только код внутри этой сборки (только A и B) сможет использовать эту функцию. Добавьте к этому метод в A, который выглядит так:
Public Shared Function getObject() As B
Return B.Create()
End Function
И мы выполнили все ваши заявленные цели. Код, который ссылается эта сборка будет в состоянии сделать это:
Dim objectB as B = A.getAobject()
Но не будет в состоянии сделать что-либо из них:
Dim objectB as new B
Dim objectB As B = B.Create()
Почему бы не просто пойти Dim objectB = A.getAobject()? Вы должны будете стесняться, хотя это может быть и не очень хорошо. – Kat
Единственный способ добиться этого - разместить класс 'A' внутри класса' B' и позволить классу 'B' иметь частный конструктор. –