![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
0leg |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 23.11.2006 Репутация: 1 Всего: 1 |
Если есть ссылка на интерфейс, можно ли по ней получить объект, реализующий этот интерфейс явным приведением типов?
Есть ли какие-то особенности в использовании этой ссылки? В частности, при сериализации полученного таким образом объекта? Я этим пользуюсь, на первый взгляд вроде все работает. Но сериализации иногда не идет. Пример кода:
|
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Можно, но если ты 100% ![]() Проверить это можно спросив: a.Add("новый класс").GetType().ToString() Но это нехорошая практика. Таким образом ты снимаешь все преимущества использования интерфейса IMy Тебе все равно есть он или его нет Добавлено @ 10:38 0leg, лучший вариант проверить ---- забить в программу и глянуть выскочило ли исключение ![]() |
|||
|
||||
0leg |
|
||||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 23.11.2006 Репутация: 1 Всего: 1 |
Нет, я не снимаю преимущества IMy! У меня есть две библиотеки - в одной объявлен набор интефейсов, в другой - классы, реализующие эти интерфейсы. Причем методы этих классов в качестве параметров иногда возвращают интерфейсы. И эти же самые методы используются для общения классов между собой. Примерно так:
|
||||
|
|||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
0leg, ты черезчур увлекся интерфейсами.
IClassA и IClassB --- явно лишнее. Тоже самое, ИМХО, с IMy. Что тебе мешает сделать просто классы ![]() Интерфейсы нужны только для того, чтобы дать классу второго (третьего,...) родителя или добавить классу некую функциональность, которая так же может быть реализована и в других (совсем посторонних класса). Но только в этом случае ![]() У тя явный перебор ![]() |
|||
|
||||
0leg |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 23.11.2006 Репутация: 1 Всего: 1 |
я не говоил, что интерфейсы IClassA и IClassB будут реализовываться однократно. У них будет несколько вариантов реализации - для каждого варианта своя библиотека. И вполне возможно, реализующие классы будут иметь еще одного родителя (кто их знает?) По поводу приведения типов - спасибо, дело оказалось в другом. Щас наверно новый топик забубеню... ![]() |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
||||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
0leg, а что не сериализуется ? И какой способ сериализации используется (бинарная, XML ?). Надо бы пример кода.
-------------------- ![]() |
|||
|
||||
0leg |
|
||||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 23.11.2006 Репутация: 1 Всего: 1 |
нет, не имеют. Предлагаешь абстрактные классы? Я книжку читал - "полный справочник C# Шилдта" (правда он далеко не полный...), там написано: "Если вы полностью описываете действия класса и не нужно уточнять как он это делает, следует использовать интерфейс. Если требуется включить в описание детали реализации - имеет смысл использовать абстрактный класс".
сриализация Xml, но уже понял что дело не в ней. Класс, котрый пытаюсь серить какой-то кривой. Сделаю щас тему другую... (если еще не надоел ![]() |
||||
|
|||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Скорее всего да ![]() ![]() Все зависит от того, что умеет должен уметь делать твой класс. Можно его код сюда получить? |
|||
|
||||
0leg |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 23.11.2006 Репутация: 1 Всего: 1 |
список интерфейсов(особое внимание на методы Add):
Добавлено @ 14:29 Сверхзадача такая: нужен доступ к БД любого типа, хранящей объекты любого типа в виде древовидного списка (объекты с IsGroup=true могут содержать другие объкты). Если есть замечания по "Всему Этому" вцелом, рад буду выслушать. ![]() |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
0leg, что я могу сказать. Конечно нужно делать абстрактные классы (если у тебя будет несколько юзеров разного типа) или реальные (если класс юзер будет единственный).
Почему: На примере класса User:
ID, Ord, Name, ... --- зачем каждый раз реализовывать свойство ID в классе, если реализация будет всегда одна и та же? Врядли что-то из этих полей будет реализовываться по разному ![]() Но даже если будут, то можно будет сделать их virtual Все остальное аналогично ![]() |
|||
|
||||
0leg |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 23.11.2006 Репутация: 1 Всего: 1 |
Все-равно нечуствую преимуществ абстрактных классов ![]()
Но если я реализую это в базовом классе, то его наследникам придётся напрямую обращаться к полям fId, fOrd для установки значений свойств. Это явно усложняет структуру класса-наследника. Теперь при реализации класса-наследника разработчику нужно знать не только какие свойства были унаследованы, но и переменные, в которых храняться значения этих свойств. з.ы. как тут табуляцию в код вставлять? ctrl+c, ctrl+v ? |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
В самом деле не чувствуешь ![]() Вся прелесть базового класса заключается в том, что тебе не надо реализовывать то, что было реализовано в базовом Пример:
В классе MyClass мы не написали ни одной строчки, но он у него есть все атрибуты базового класса. У него есть свойства Ord и Id, поля fId, fOId. Так как будто их определили в этом классе. Таким образом мы можем заранее реализовать всю общую функциональность в базовом классе. И далее не заботиться о ней, а работать реализовывать только с новую функциональность класса. Мы даже можем переопределить свойство Ord (если нужно). В случае же с интерфейсами нам приходиться делать всю работу с нуля. Пример: При работе с формой в VS мы наследуемся от от базового класса Form. Только представь, что бы было, если бы этот класс был бы интерфейсом. |
|||
|
||||
0leg |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 23.11.2006 Репутация: 1 Всего: 1 |
||||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Не за что ![]() ![]() Аааа, земляк ![]() ![]() ![]() Это сообщение отредактировал(а) ivashkanet - 2.12.2006, 18:15 |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |