Концептуально, нет причин, по которым vb.net не может предложить аналогичную функцию и генерировать два (или даже три) разных свойства, как требуется для реализации интерфейсов. По крайней мере, в настоящее время, если член класса vb.net помечен как реализующий член интерфейса, ожидается, что он будет идеально соответствовать члену без переноса.
связано сэтот другой вопрос)
Если вы определяете интерфейс, в котором есть свойство только с геттером (= ReadOnly в VB.NET),почему вы можете определить сеттер в реализации классов с C #, но не с VB ?
Я бы подумал, что это определено на уровне .NET, а не для конкретного языка.
Пример: для этого интерфейса
'VB.NET
Interface SomeInterface
'the interface only say that implementers must provide a value for reading
ReadOnly Property PublicProperty As String
End Interface
или же
//C# code
interface IPublicProperty
{
string PublicProperty { get; }
}
Это правильная реализация в C #:
public class Implementer:IPublicProperty
{
private string _publicProperty;
public string PublicProperty
{
get
{
return _publicProperty;
}
set
{
_publicProperty = value;
}
}
}
Но это недействительно в VB.NET
Public Property PublicProperty As String Implements SomeInterface.PublicProperty
Get
Return _myProperty
End Get
Set(ByVal value As String)
_myProperty = value
End Set
End Property
ОБНОВЛЕНИЕ 2015/04/23
Оказывается, эта функция входит в состав VB14! ВидетьЯзыковые особенности в C # 6 и VB 14 а такжеНовые возможности языка в Visual Basic 14 :
Свойства интерфейса ReadOnly могут быть реализованы реквизитами ReadWrite. Это очищает причудливый угол языка. Посмотрите на этот пример:
Interface I
ReadOnly Property P As Integer
End Interface
Class C : Implements I
Public Property P As Integer Implements I.P
End Class
Раньше, если вы реализовывали свойство ReadOnly I.P, вам также приходилось реализовывать его с помощью свойства ReadOnly. Теперь это ограничение было ослаблено: вы можете реализовать его с помощью свойства чтения / записи, если хотите. Этот пример реализует его с помощью чтения / записи autoprop, но вы также можете использовать свойство с getter и setter.