我正在使用一些 VB 代码。我正在用 c# 重写原始 VB 代码中的一些内容
在我的 VB 类中:
Implements actionBaseClass
Private m_config_url As String
Private m_config_unc As String
Private m_connection_string As String
Private m_xml_doc_path_or_data As String
Private m_fpid As String
Private m_cancelled As Boolean
Private m_xml_doc_element As Xml.XmlElement
Private m_removing As Boolean
Private m_xml_doc As New Xml.XmlDocument
Property XMLDocPathOrData() As String Implements actionBaseClass.XMLDocPathOrData
Get
XMLDocPathOrData = m_xml_doc_path_or_data
End Get
Set(ByVal Value As String)
m_xml_doc_path_or_data = Value
End Set
End Property
WriteOnly Property FPId() As String Implements actionBaseClass.FPId
Set(ByVal Value As String)
m_fpid = Value
End Set
End Property
我转换后的 C# 接口(interface):
interface actionBaseClass
{
public bool UseStringData { get; }
string XMLDocPathOrData { get; set; }
string FPId { set; }
string ConfigURL { set; }
string ConfigUNC { set; }
string ConnectionString { set; }
bool Cancelled { get; }
void ActionMe();
void DisposeMe();
}
到目前为止我转换的 C# 类:
public partial class Form1 : Form, actionBaseClass
{
#region Public Implements from base class
private string m_config_url, m_config_unc, m_connection_string, m_xml_doc_path_or_data, m_fpid;
private bool m_cancelled, m_removing;
private XmlElement m_xml_doc_element;
private new XmlDocument m_xml_doc;
public bool UseStringData
{
get { return false; }
}
public string XMLDocPathOrData
{
get { return actionInterface.XMLDocPathOrData = m_xml_doc_path_or_data; }
set { m_xml_doc_path_or_data = value; }
}
public string FPId
{
set { m_fpid = value; }
}
如何在 C# 中像上述 VB 代码一样在属性声明中使用 Implements?还是在使用 Implements <interface_name>
后不必在 C# 中执行此操作?
最佳答案
您不必在 C# 中为从接口(interface)实现某些内容的每个属性和方法指定 Implements 关键字。只要签名匹配,编译器就知道该属性或方法是接口(interface)的实现。
关于您的代码的另外两个注释:
- 惯例是接口(interface)名称以大写 I 开头,例如 IAction
- 对类和接口(interface)名称使用 PascalCase
- 如果它是一个接口(interface),它被称为“BaseClass”是没有意义的
- 您不必在接口(interface)的属性和方法中指定 public(请参阅 UseStringData)
关于c# 在属性上实现接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33398216/