Библиотеки создаются в инструменте, а не в самом VHDL. Например, в modelsim библиотеки создаются с помощью команды vlib, например.
vlib my_library;
В VHDL вы можете включить свою библиотеку в любой регион с помощью команды библиотеки, а объекты (например, пакет) можно включить с помощью команды use:
library my_library;
use my_library.some_package.all;
Учитывая то, что Вы пытаетесь выполнить, и с примером кода, который Вы отправили, VB.NET не позволит Вам сделать это.
Обычно, можно объявить свойство в VB.NET как так:
Public Class qwqwqw
Public Property xyz() As String
Get
Return ""
End Get
Private Set(ByVal value As String)
'
End Set
End Property
End Class
В основном отмечая общее свойство как общественность, но давая более строгий объем методу set (или метод считывания).
Основной проблемой в Вашем случае является MustInherit (т.е. краткий обзор) базовый класс. Так как свойство, которое Вы определяете там, отмечено как MustOverride, Вы не можете обеспечить реализацию по умолчанию (т.е. это также абстрактно), и это включает основы "Получения" и "Набора", поэтому, какой бы ни "полный" объем, который Вы даете этому абстрактному объявлению свойства, VB.NET, вынудит Вас использовать этот объем и для методов считывания и для методов set в производных классах.
Наличие спецификатора ReadOnly на свойстве базового класса вынудит все производные классы и реализации этого свойства также быть ReadOnly. Бросание спецификатора ReadOnly все еще не будет работать, с тех пор независимо от того, что объемом, который Вы даете абстрактному свойству, будет объем, необходимо обратиться и к методам set и к методам считывания в рамках полученных реализаций.
Например:
Public MustInherit Class Parent
Public MustOverride Property Foo() As String
End Class
Public Class ReadOnlyChild
Inherits Parent
Public Overrides Property Foo() As String
Get
'
End Get
Private Set(ByVal value As String)
'
End Set
End Property
End Class
(Отметьте Частный обзор на методе set). Это не будет работать, поскольку VB.NET настаивает, чтобы, так как Вы переопределяете свойство базовых классов, Ваше все свойство имело тот же объем как свойство, которое Вы переопределяете (в этом случае, общественность).
Попытка сделать абстрактное свойство базового класса защищенным не будет работать также, так как Вы были бы затем обязаны реализовывать свойство на том же уровне обзора, как это объявлено в Вашем базовом классе (т.е. защищено). Обычно, если не переопределяя абстрактное определение базового класса с определенным уровнем обзора, можно дать методу считывания или методу set более строгий уровень обзора, но Вы не можете дать ему менее строгий уровень обзора.
Поэтому:
Public MustInherit Class Parent
Protected MustOverride Property Foo() As String
End Class
Public Class ReadOnlyChild
Inherits Parent
Protected Overrides Property Foo() As String
Public Get
'
End Get
Set(ByVal value As String)
'
End Set
End Property
End Class
(Отметьте общедоступный обзор на методе считывания). Не работает ни один из-за общедоступного объема, являющегося менее строгим, чем объем общего свойства защищенных, и кроме того, не того же уровня обзора, как определено на абстрактном объявлении свойства базового класса.
Если дизайн Ваших классов - как Вы упоминаете в своем вопросе, я лично, пошел бы со "стилем Java" методы получателя и методы установщика, поскольку они могут затем быть объявлены отдельно с их собственными уровнями обзора.
Могло бы быть крайне рискованное..., учитывая, что мое знание VB.NET минимально...
В C# можно указать видимость средства доступа свойства независимо от свойства:
public virtual string Name
{
get { ... }
protected set { ... }
}
В этом примере дочерние классы могут получить доступ к методу set, но другие классы не могут.
Также обратите внимание, что переопределения могут иметь большую видимость, чем, что они переопределяют - таким образом, можно сделать это:
public overide string Name
{
get { ... }
public set { ... }
}
Вы могли сделать что-то вроде этого в VB.NET?
Подтвердите, что MrEdmuno корректен в этом, можно использовать Тень. Однако кажется, что Вы не можете непосредственно теневой что-то, что является отмеченным MustInherit, таким образом, необходимо наследоваться в класс (Родительские 2)... затем в только для чтения (на самом деле думающий об этом, Вы, вероятно, не должны использовать тени, если Вы наследовались в класс),
Я думаю, что мой вопрос о комментарии все еще стоит, почему необходимо сделать это? Если бы они - Ваши собственные классы, Вы были бы лучше для изменения их или реализации как интерфейс?
Public MustInherit Class Parent
Public MustOverride ReadOnly Property Foo() As String
End Class
Public Class ReadOnlyChild
Inherits Parent
Public Overrides ReadOnly Property Foo() As String
Get
'Get the Property
Return "Return"
End Get
End Property
End Class
Public Class Parent2
Inherits Parent
Public Overrides ReadOnly Property Foo() As String
Get
Return "Return 2"
End Get
End Property
End Class
Public Class ReadWriteChild
Inherits Parent2
Public Shadows Property Foo() As String
Get
'// Get the property.
Return "2"
End Get
Set(ByVal value As String)
'** Set something
End Set
End Property
Unfortunatly, на котором у меня нет Visual Studio здесь, таким образом, я не могу подтвердить.
Вы посмотрели на использование Теней, это - effectivly то же что "новый" в объявлении свойства C#.
Чтобы решить, что предложил Беван, в VB.NET вы можете объявить свойство как имеющее общедоступный метод получения и защищенный метод установки следующим образом:
Private _ExpectedTotalRoyalties As Decimal
Public Property ExpectedTotalRoyalties() As Decimal
Get
Return _ExpectedTotalRoyalties
End Get
Protected Set(ByVal value As Decimal)
If Not _ExpectedTotalRoyalties.Equals(value) Then
_ExpectedTotalRoyalties = value
SendPropertyChanged("ExpectedTotalRoyalties")
End If
End Set
End Property
Не пытайтесь переопределить свойство, поскольку оно не является виртуальным. Переопределите методы OnReadOnlyChanged и решайте свои проблемы там. Удачи