【发布时间】:2011-09-14 12:47:26
【问题描述】:
(这与this other question有关)
如果你定义一个接口,其中只有一个 getter 的属性(= VB.NET 中的 ReadOnly),为什么你可以在用 C# 而不是用 VB 实现类时定义 setter?
我原以为它是在 .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 年 4 月 23 日更新
原来这个功能是 VB14 的一部分! 见Languages features in C# 6 and VB 14 和New Language Features in Visual Basic 14:
ReadOnly 接口属性可以通过 ReadWrite props 实现 这清理了语言的一个古怪角落。看这个例子:
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 的属性和 二传手。
【问题讨论】:
标签: .net c#-to-vb.net vb.net-to-c#