Ice*_*ind 3 .net c# vb.net interface
这似乎是一个明显的答案,但我似乎无法找到答案.我在VB.NET中有这个代码:
Public Interface ITestInterface
WriteOnly Property Encryption() As Boolean
End Interface
Run Code Online (Sandbox Code Playgroud)
我在VB.NET中也有这个类和实现:
Partial Public Class TestClass
Implements ITestInterface
Public WriteOnly Property EncryptionVB() As Boolean Implements ITestInterface.Encryption
Set(ByVal value As Booleam)
m_Encryption = value
End Set
End Property
End Class
Run Code Online (Sandbox Code Playgroud)
我试图将其转换为C#.我把C#接口转换得很好,就像这样:
public interface ITestInterface
{
bool Encryption { set; }
}
Run Code Online (Sandbox Code Playgroud)
问题是,如何将实现转换为.我有这个:
public partial class TestClass
{
public bool Encryption
{
set { m_Encryption = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
问题在于,在C#中,您似乎必须将该函数命名为与您正在实现的接口函数相同的名称.如何调用此方法EncryptionVB而不是Encryption,但仍然实现加密属性?
我能想到的最接近的方法是使用显式实现:
public partial class TestClass : ITestInterface
{
public bool EncryptionVB
{
((ITestInterface)this).Encryption = value;
}
bool ITestInterface.Encryption { set; }
}
Run Code Online (Sandbox Code Playgroud)
现在,从表面上看,这似乎"不一样".但确实如此.考虑一下这样的事实:在VB.NET中,当您为实现接口成员的成员命名与接口定义的成员不同时,只有在编译时知道类型时才会出现此"新名称".
所以:
Dim x As New TestClass
x.EncryptionVB = True
Run Code Online (Sandbox Code Playgroud)
但如果x在上面的代码中键入为ITestInterface,则该EncryptionVB属性将不可见.它只能在以下情况下访问Encryption:
Dim y As ITestInterface = New TestClass
y.Encryption = True
Run Code Online (Sandbox Code Playgroud)
实际上,这与 C#中的显式接口实现完全相同.看一下等效的代码:
TestClass x = new TestClass();
x.EncryptionVB = true;
ITestInterface y = new TestClass();
y.Encryption = true;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3540 次 |
| 最近记录: |