Как мне относиться к двум похожим типам как к одному? - PullRequest
1 голос
/ 28 февраля 2009

В VB.NET я пытаюсь поговорить с веб-сервисом (который нельзя изменить) для создания и обновления данных клиентов. Служба CreateCustomer ожидает объект типа ConsumerPerson, а служба ChangeCustomer ожидает объект типа ChangeData.

Свойства этих двух объектов абсолютно одинаковы, поэтому я подумал, что было бы разумно просто установить свойства, используя одну функцию.

Однако я не могу найти способ сообщить своей функции, что я хочу заполнить объект ConsumerPerson или ChangeCustomer.

Как мне заставить эту работу работать без проблем с поздним связыванием?

Ответы [ 5 ]

1 голос
/ 28 февраля 2009

Интерфейс звучит как ваш лучший подход. Вот небольшой фрагмент кода. Я выбрал простое свойство с именем «Имя» типа строки. Это должно быть легко изменить с фактическими свойствами в вашем классе.

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
1 голос
/ 28 февраля 2009

Вы создаете интерфейс, который реализует оба класса.

1 голос
/ 28 февраля 2009

используйте интерфейс!

объявляет интерфейс IFoo и реализует его члены в ваших подклассах ConsumerPerson и ChangeCustomer. Это именно то, для чего нужны интерфейсы.

0 голосов
/ 28 февраля 2009

Если вы не можете изменить свои объекты, но они имеют одинаковые имена полей, вы можете xml сериализовать данные и десериализовать, как и другой класс. - Вы должны сильно учитывать последствия этого для производительности; однако, это даст вам функциональность, о которой вы просите.

0 голосов
/ 28 февраля 2009

Разве невозможно перегрузить вашу функцию вторым типом данных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...