我目前正在从Vb6转换为C#,其中允许使用以下Vb6代码:
Private Property Let gUnit(Optional bResolve As Boolean, aNoseHi)
gNoseLo(Optional parameter) = 0
End Property
不允许:
void Test()
{
gNoseLo(false) = 0 //error occurs here
}
gNoseLo
已在VB6中定义为Private Property Get gNoseLo(Optional bResolve As Boolean)
。我不能在C#中使用公共属性方法,因为有参数所以我使用了一个方法。重新编码gNoseLo
以接受值赋值并防止错误的正确方法是什么?
答案 0 :(得分:2)
C#中的“带参数的属性”是索引器。虽然 1 ,但你无法在VB中为它命名。你声明它是这样的:
public int this[bool parameter]
{
get { ... }
set { ...}
}
现在可能适用于您的用例,也可能不适用。替代方案是:
使用索引器返回的常规属性:
public class IndexedByBoolean
{
public int this[bool parameter]
{
get { ... }
set { ...}
}
}
public class ContainsPropertyIndexedByBool
{
private readonly IndexedByBoolean index;
public IndexedByBoolean NoseLo { get { return index; } }
}
然后您可以使用foo.NoseLo[true] = 0
使用Get
和Set
方法:
SetNoseLo(true, 0);
1 好吧,你指定一个名字,但不要用 这个名字。