【问题标题】:How do I treat two similar types as one?如何将两种相似的类型视为一种?
【发布时间】:2009-02-28 15:58:25
【问题描述】:

在 VB.NET 中,我正在尝试与 Web 服务(无法更改)通信以创建和更新客户数据。 CreateCustomer 服务需要一个 ConsumerPerson 类型的对象,而 ChangeCustomer 服务需要一个 ChangeData 类型的对象。

这两个对象的属性完全相同,所以我认为只使用一个函数设置属性是明智的。

但是,我无法找到一种方法来告诉我的函数我想要填充 ConsumerPerson 或 ChangeCustomer 对象。

如何在没有后期绑定问题的情况下完成这项工作?

【问题讨论】:

    标签: vb.net properties types


    【解决方案1】:

    界面听起来是您最好的方法。这是一个短代码sn-p。我选择了一个名为“Name”的字符串类型的简单属性。使用类的实际属性应该很容易修改。

    Public Interface ICustomerData
      ReadOnly Property Name As String
    End Interface
    
    Public Class ConsumerPerson
      Implements ICustomerData
    
      Public ReadOnly Property Name As String Implements ICustomerData.Name
        Get
          return _name 
        End Get
      End Property
    End Class
    
    Public Class ChangeData
      Implements ICustomerData
    
      Public ReadOnly Property Name As String Implements ICustomerData.Name
        Get
          return _name 
        End Get
      End Property
    End Class
    

    【讨论】:

    • 理论上听起来不错。但是查看代码,我意识到我遗漏了一些关键细节:我也无法更改 ConsumerPerson 或 ChangeData 类。
    • @sebastiaan,如果你使用 svcutil.exe 来生成你的代理类,它将使这两种类型成为局部的,这意味着你可以让它们实现相同的接口。
    • @darin 完全正确,我错过了!非常感谢!
    【解决方案2】:

    使用接口!

    声明一个接口 IFoo,并在您的子类 ConsumerPerson 和 ChangeCustomer 中实现它的成员。这正是接口的用途。

    【讨论】:

      【解决方案3】:

      您创建一个两个类都实现的接口。

      【讨论】:

        【解决方案4】:

        不能用第二种数据类型重载你的函数吗?

        【讨论】:

          【解决方案5】:

          如果您无法更改对象,但它们共享相同的字段名称,您可以 xml 序列化数据并反序列化为其他类。 - 您应该强烈考虑这对性能的影响;但是,它会为您提供所需的功能。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-11-14
            • 2023-02-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多