Мне нужно все мое TableAdapters
для реализации пользовательского интерфейса. Проблема в том, что некоторые члены, определенные интерфейсом, находятся в файле конструктора DataSet, который я не хочу (и не должен) изменять, так как этот код будет автоматически регенерироваться. Я не могу переместить этих членов в свой файл кода по той же причине. Какой у меня выход?Внедрить интерфейс в частичном классе
ответ
Когда вы реализуете интерфейс, члены, которые вы объявляете, не должны иметь те же имена, что и члены интерфейса, и они не обязательно должны быть общедоступными. Допустим, что у вас есть этот конструктор сгенерированный класс:
Partial Public Class SomeClass
Public Sub FirstMethod()
Console.WriteLine("FirstMethod")
End Sub
Public Sub SecondMethod()
Console.WriteLine("SecondMethod")
End Sub
End Class
и вы хотите, чтобы реализовать этот интерфейс:
Public Interface ISomeInterface
Sub FirstMethod()
Sub ThirdMethod()
End Interface
Обратите внимание, что интерфейс имеет метод с именем FirstMethod
но SomeClass
уже есть метод FirstMethod
. Вы можете добавить свой собственный частичный класс для реализации интерфейса, как это:
Partial Public Class SomeClass
Implements ISomeInterface
Private Sub FirstMethodInternal() Implements ISomeInterface.FirstMethod
Me.FirstMethod()
End Sub
Public Sub ThirdMethod() Implements ISomeInterface.ThirdMethod
Console.WriteLine("ThirdMethod")
End Sub
End Class
Метод, который реализует ISomeInterface.FirstMethod
не назван FirstMethod
поэтому он не вступает в противоречие с существующим методом с этим именем, и это также Private
так это не могут быть доступны извне, используя ссылку типа SomeClass
. Однако использование ссылки типа ISomeInterface
- другое дело. Если вы используете такой код:
Dim sc As ISomeInterface = New SomeClass
sc.FirstMethod()
sc.ThirdMethod()
вы увидите, что FirstMethodInternal
метод вашего SomeClass
объекта вызывается, и, в свою очередь, вызывает FirstMethod
метод того же объекта. Попробуйте запустить этот код и поместите контрольные точки в методах FirstMethod
и FirstMethodCore
, чтобы доказать это самому себе.
Это великолепно. Никогда не осознавали, что это могут быть частные. Огромное спасибо. – dotNET
- 1. Супер-интерфейс в частичном классе в WCF
- 2. Внедрить интерфейс в классе адаптера в android
- 3. Внедрить интерфейс, объявленный во внутреннем классе
- 4. Внедрить интерфейс
- 5. Внедрить интерфейс в классе как часть кода Fix
- 6. Свойство в частичном классе Entity
- 7. Свойства группы в частичном классе
- 8. атрибута Override в частичном классе
- 9. Метод вызова в частичном классе
- 10. Переопределение Равно в частичном классе
- 11. Внедрить интерфейс DialogFragment в OnClickListener
- 12. Внедрить интерфейс в OO Haskell
- 13. @ Внедрить интерфейс в сеансовом компоненте
- 14. Внедрить интерфейс Java в C++
- 15. Переписывание абстрактного метода в частичном классе
- 16. Внедрить интерфейс частично по нескольким классам
- 17. PHP/Doctrine2 - Внедрить интерфейс дважды
- 18. Внедрить интерфейс с ASM: ClassCastException
- 19. Внедрить интерфейс метода расширения C#
- 20. C# Внедрить интерфейс через делегата
- 21. Внедрить существующий метод через интерфейс?
- 22. Изменить свойство LINQ2SQL в частичном классе?
- 23. Проблемы с DataAnnotations в частичном классе
- 24. Атрибут переопределения в частичном классе (DBML)
- 25. Переопределить виртуальный метод в частичном классе
- 26. Выполнение двух методов в частичном классе
- 27. Переменная сеанса, недоступная в частичном классе
- 28. Свойства управления формой в частичном классе
- 29. Внедрить интерфейс, отличный от подписи класса
- 30. Внедрить интерфейс в зависимости от версии фрейма
Это строго типизированный DataSet. Каждый DataTable имеет свой собственный TableAdapter, который, к сожалению, наследуется от «Компонента» вместо «DbTableAdapter» или чего-то более конкретного, поэтому я пытаюсь заполнить пробел, реализуя свой собственный интерфейс во всех этих адаптерах. – dotNET
Вы можете создать пользовательский класс, реализующий интерфейс, и расширить DataSet или компонент или что-то еще, а затем использовать его вместо предопределенных компонентов пользовательского интерфейса. Таким образом, вы будете иметь свое обычное поведение и TableAdapter сразу. – pasty
@pasty: Вы работали с сильно типизированными DataSets? Это поможет понять, о чем я говорю. У меня есть несколько DataTables, и каждый из них имеет свой собственный TableAdapter. Все они уже имеют общие свойства и методы (с точно такими же сигнатурами). Просто эти классы TableAdapter не наследуются от хорошего базового класса, и они не реализуют общий интерфейс, поэтому я должен писать один и тот же код для каждого TableAdapter отдельно. Благодаря специальному интерфейсу, реализованному всеми из них, я мог бы использовать полиморфизм для обработки всех этих адаптеров за один раз. – dotNET