Страница: 1 |
Страница: 1 |
Вопрос: свойство с разными значениями
Добавлено: 10.05.06 16:03
Автор вопроса:
SHDZ | ICQ: 209382104
Программа подключается к разным базам, хочу сделать один класс, который возвращал-бы объект Connaction.
Я хочу в одном классе сделать возврат свойства
myConn типом SqlConnection или OleDbConnection, в зависимости от того есть ли значение в свойстве Provider, по умолчанию ""
P.S. может туманно написал - тока начал разбираться в нет.
Подскажите....
Ответы
Всего ответов: 13
Номер ответа: 1
Автор ответа: SHDZ
ICQ: 209382104
Вопросов: 39
Ответов: 244
Профиль | | #1
Добавлено: 10.05.06 18:53
Если проще то скажу так:
подскажите в какую строну копать:
String WWW; Int qqq;
public String WWW
{
get
{return this.www;}
set
{this.www = value;}
}
public int WWW
{
get
{return this.qq;}
set
{this.qq = value;}
}
Это-то понятно что в одном классе не вмещается - а что можна сделать чтоб получилось в зависимости от значения какойто переменной вызывалось то одно свойство то другое, или подменялся тип или не придумаю что еще...
Номер ответа: 2
Автор ответа: SHDZ
ICQ: 209382104
Вопросов: 39
Ответов: 244
Профиль | | #2
Добавлено: 11.05.06 10:24
HELP
подсажите же, я уже тонны литературы перерыл, пишут что мол это возможно, но ни в одной книжке скачанной не нашел....................
Номер ответа: 3
Автор ответа: EROS
Вопросов: 58
Ответов: 4255
Профиль | | #3
Добавлено: 11.05.06 14:41
{
get
{return this.www;}
set
{this.www = value;}
}
public int WWW
{
get
{return this.qq;}
set
{this.qq = value;}
}
Со свойствами такой вариант не пройдет.. Это можно сделать через метод. Читай про перегрузку методов через Overloads .. Это именно то,что тебе нужно. Этот оператор позволяет создавать ф-ю с одинаковыми именами, но с разными входными параметрами..
Номер ответа: 4
Автор ответа: SHDZ
ICQ: 209382104
Вопросов: 39
Ответов: 244
Профиль | | #4
Добавлено: 11.05.06 16:12
Типа метод с выходными параметрами?
А как сделать выборочную перегрузку - мол если условие = 1, то не перегружаем и возвращаем один тип, а если условие = 2, перегружаем и возвращаем параметр другого типа?
P.S. А через интерфейсы - в этом направлении можна чтото нарыть?
Номер ответа: 5
Автор ответа: EROS
Вопросов: 58
Ответов: 4255
Профиль | | #5
Добавлено: 11.05.06 16:37
Насколько я тебя понял из твоих слов
Возвращаться всегда должен один объект, а теперь выясняется, что перегруженный метод будет возвращать объекты разных типов?
Ты уж сначала определись для себя,что ты вообще хочешь сделать.. И конкретней излогай задачу.. Какие данные и какого типа мы имеем на входе, и что мы должны получить на выходе? И что заусловие о котором ты говорил...
А иначе мы убъем кучу времени впустую...
Номер ответа: 6
Автор ответа: SHDZ
ICQ: 209382104
Вопросов: 39
Ответов: 244
Профиль | | #6
Добавлено: 11.05.06 16:40
угу, тока в одном случае ОЛЕДБ, а в другом СКЛ
Номер ответа: 7
Автор ответа: SHDZ
ICQ: 209382104
Вопросов: 39
Ответов: 244
Профиль | | #7
Добавлено: 11.05.06 16:42
Подробней - хотел сделать класс, который будет иметь свойство Connection, в зависимости от того что указано в свойстве Provider этого класса - если пусто - то SQLConnection, else OLEDBConnection
Номер ответа: 8
Автор ответа: SHDZ
ICQ: 209382104
Вопросов: 39
Ответов: 244
Профиль | | #8
Добавлено: 11.05.06 16:45
Зачем это все - у меня в процессе работы программа подключается на разные базы а то и сервера, вся логика переключений роли не играет, важно чтоб этот коннекшн был не тока скл а и оледб, да можно просто оледб взять, но т.к. я в НЕТ пытаюсь паралельно разобраться то и хотел сделать както универсально
Номер ответа: 9
Автор ответа: EROS
Вопросов: 58
Ответов: 4255
Профиль | | #9
Добавлено: 11.05.06 18:58
Вся беда в том, что на выходе ты имеешь объекты разных типов, а значит надо привести их к общему знаменателю. Следовательно свойство Connection должно иметь тип Object. И где то в коде перед использованием Connection придется через CType приводить его к нужному виду соеденения.
Схематично это может выглядеть примерно так:
Imports System.Data.OleDb
Public Class Database
Public Property Provider() As String
Get
'
End Get
Set(ByVal value As String)
'
End Set
End Property
Public ReadOnly Property ConnectionString() As String
Get
If MyClass.Provider = "OleDb" Then
Return "OleDb ConnectionString"
Else
Return "Sql ConnectionString"
End If
End Get
End Property
Public ReadOnly Property Connection() As Object
Get
If MyClass.Provider = "OleDb" Then
Return New OleDbConnection(MyClass.ConnectionString)
Else
Return New SqlClient.SqlConnection(MyClass.ConnectionString)
End If
End Get
End Property
End Class
Номер ответа: 10
Автор ответа: EROS
Вопросов: 58
Ответов: 4255
Профиль | | #10
Добавлено: 11.05.06 19:02
и еще.. (имхо) если бы можно было сделать универсальный класс, то MS не стала бы разделять их на OleDB & Sql..
Номер ответа: 11
Автор ответа: SHDZ
ICQ: 209382104
Вопросов: 39
Ответов: 244
Профиль | | #11
Добавлено: 11.05.06 19:47
мдя... логично
большое Спасиба, прояснилось
Номер ответа: 12
Автор ответа: student-uni
Вопросов: 122
Ответов: 257
Профиль | | #12
Добавлено: 11.05.06 23:50
может чего здесь поможет
http://vbnet.ru/forum/show.aspx?id=96056
Номер ответа: 13
Автор ответа: Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #13
Добавлено: 13.05.06 19:27
Паттерн "абстрактная фабрика" в помощь.
А свойство делать типа IDBConnection, а не Object.