Вопрос:

Как реализовать два одинаковых метода в одном классе

vb.net

85 просмотра

3 ответа

6 Репутация автора

У меня есть Class, BettingAgency и два экземпляра TAB и Ladbrokes. Проблема в том, что, хотя они имеют одинаковые сигнатуры методов, методы для каждого реализуются по-разному. Я не хочу реализовывать экземпляры как отдельные классы, так как у меня есть DataGrid, который поддерживает список BettingAgencies. Казалось бы, очень распространенная потребность. Есть ли решение моей проблемы в VB.NET.

У меня есть решение этой проблемы. Один из методов, на которые я ссылаюсь выше, - это GetMeetings. TAB и Ladbrokes предоставляют для этого веб-API, каждый из которых немного отличается. Я создал классы TAB.vb и Ladbroke.vb специально для обработки веб-API с унаследованным классом BettingAPI. У меня также есть класс Meetings с Sub New, которому я передаю объект BettingAPIs (TAb или Ladbrokes). Таким образом, я создаю свои встречи в Новой Субъекте Встреч, вызывая BettingAPIs.GetMeetings.

Автор: Anthony Rogan Источник Размещён: 02.02.2017 02:37

Ответы (3)


2 плюса

970 Репутация автора

С точки зрения ООП, вы должны сделать BettingAgency базовым классом, и TAB и Ladbrokes оба расширят его. Затем каждый из них может совместно использовать все атрибуты модели / представления / управления родительского класса, но вы переопределяете методы или методы получения, которые должны работать по-разному. Таким образом, у вас может быть функция scrapeSite (), которая переопределяется во всех дочерних классах, но все остальное одинаково.

Автор: joshstrike Размещён: 02.02.2017 02:42

0 плюса

0 Репутация автора

Похоже, вы можете перегружать методы в VB.NET

https://msdn.microsoft.com/en-us/library/ms973896.aspx

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

Вы должны быть в состоянии достичь того, чего хотите, тем не менее, однако более правильный способ сделать это будет путем создания базового класса и расширения этого класса.

https://msdn.microsoft.com/en-us/library/5x4yd9d5(v=vs.90).aspx

Это позволит вам переопределить методы для более конкретных классов.

Автор: user4899189 Размещён: 02.02.2017 02:48

0 плюса

322 Репутация автора

Есть ли у вашего метода объект отправителя:

 public void myMethod(object sender, Event Args e){
if (sender.someproperty == "TAB") do something...
}

если нет, просто добавьте пользовательскую переменную:

 public void myMethod(whoSentIt){
if(whosentIt == "Tab") do something...
}
Автор: Jim VanPetten Размещён: 02.02.2017 02:48
Вопросы из категории :
32x32