我在VB.Net中将此类编写为自定义控件的一部分。它允许我切换3个链接标签的状态,并使用Text属性设置每个标签的文本。这是所有用户都可以使用它。我可以毫无问题地转换Enabled属性和构造函数,但我不确定是转换Text属性的最佳方法。一个函数将需要2个参数,并且索引器将作用于LabelExtender3,而不是像当前在VB.Net中那样在Text上。那么转换这样的东西的正确方法是什么?
Public Class LabelExtender3
Private lblTemp(2) As Label
Public WriteOnly Property Enabled As Boolean
Set(value As Boolean)
If value Then
lblTemp(0).ForeColor = Color.MediumBlue
lblTemp(1).ForeColor = Color.MediumBlue
lblTemp(2).ForeColor = Color.MediumBlue
Else
lblTemp(0).ForeColor = Color.SteelBlue
lblTemp(1).ForeColor = Color.SteelBlue
lblTemp(2).ForeColor = Color.SteelBlue
End If
End Set
End Property
Public WriteOnly Property Text(ByVal index As Integer) As String
Set(value As String)
lblTemp(index).Text = value
End Set
End Property
Friend Sub New(ByRef value1 As Label, ByRef value2 As Label, ByRef value3 As Label)
lblTemp(0) = value1
lblTemp(1) = value2
lblTemp(2) = value3
End Sub
End Class
答案 0 :(得分:2)
你遇到过VB.NET所具有的C#不具备的功能:可索引的属性。
更具体地说,C#缺乏声明它们的能力,但它能够使用它们(在C#4.0中添加)并且可能仅限于COM Interop使用。
最好在这种情况下制定方法:
textField.text = NSUserDefaults.standardUserDefaults().objectForKey("key") as! String
答案 1 :(得分:1)
C#不允许带参数的属性,所以没有直接转换,但你可以改为创建一个方法。
尝试使用Instant C#我发现它是转化的最佳工具(我与该公司无关):
toValue: { x: value, y: value}
答案 2 :(得分:0)
在C#WriteOnly
中,属性等同于只有set
部分的C#属性。但是你不能将参数传递给C#属性,除非它是一个索引器,所以它成为一个方法。所以你会把代码转换成:
public class LabelExtender3
{
private Label[] lblTemp = new Label[3];
public bool Enabled
{
set
{
if (value)
{
lblTemp[0].ForeColor = Color.MediumBlue;
lblTemp[1].ForeColor = Color.MediumBlue;
lblTemp[2].ForeColor = Color.MediumBlue;
}
else
{
lblTemp[0].ForeColor = Color.SteelBlue;
lblTemp[1].ForeColor = Color.SteelBlue;
lblTemp[2].ForeColor = Color.SteelBlue;
}
}
}
public string SetText(int index, string value)
{
lblTemp[index].Text = value;
}
internal LabelExtender3(ref Label value1, ref Label value2, ref Label value3)
{
lblTemp[0] = value1;
lblTemp[1] = value2;
lblTemp[2] = value3;
}
}