2010-08-04 2 views
1

Мне нужно создать набор статических классов, и все они должны реализовать те же методы. Я хочу найти способ заставить их так.Как заставить статический класс реализовать определенные методы?

Я понимаю, что статические классы не могут получить ничего, кроме System.Object. Должен ли я использовать для этого нестатические методы? Это может быть так, но ни один из методов этого класса не будет использовать свойства экземпляра ...

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

Что вы можете предложить?

EDIT:

Я не буду применять эти методы. Мне нужно заставить других разработчиков внедрять определенные методы со специфическими сигнатурами. Все подписи одинаковы для каждого класса. Вот и все.

Представьте, что у вас есть статический класс, который получает записи из базы данных в вашем офисе. У вас есть несколько способов сделать это. Поскольку ни один из этих методов не использует общие переменные, они помечены как статические, а также класс.

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

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

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

Вот почему я упомянул об использовании одноэлементного рисунка. Разве я не должен это делать?

+4

Зачем вам нужны статические классы для реализации определенных методов? Причина, по которой вы обычно нуждаетесь в конкретных методах присутствия, заключается в том, чтобы включить полиморфизм, то есть иметь возможность передавать экземпляры разных типов объектов, которые могут обрабатываться одинаково. Такая концепция не имеет смысла для статических классов, поскольку нет экземпляров статических классов. –

+2

Можете ли вы объяснить, почему вы хотите, чтобы статические классы имели одни и те же методы, это может помочь другим дать больше предложений. (На данный момент я не могу думать, почему кто-то захочет это сделать!) – MikeG

+0

@ Mike G ... ТОЧНО !!!! – IbrarMumtaz

ответ

0

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

В то время как мы говорим о интерфейсах и базовых классах и т. Д., Если вы контролируете код, есть ли причина, по которой вы не можете просто создать набор классов, которые все реализуют требуемые методы? Вам нужно будет документировать, что вы сделали и почему, конечно, но не придерживаясь «конвенции», есть ли у вас причина для , а не?

Если вы используете статические классы, которые не наследуют ничего, кроме System.Object, и не реализуют никаких интерфейсов, вы не можете называть их взаимозаменяемыми в любом случае.

EDIT Основываясь на вашем редактировании, похоже, что вы пытаетесь обеспечить, чтобы политика кодирования выполнялась с помощью самого кода. В каждом магазине разработки есть свои Политики, Процедуры и Стандарты, которые они следуют, от документации, до макета проекта, до подписи метода. Мой текущий клиент очень строг в отношении сигнатур методов, потому что мы передаем много вещей и из BizTalk и его боль, чтобы изменить решение BizTalk только потому, что кто-то не хотел следовать шаблону, который использует остальная часть команды.

Если вы являетесь членами вашей команды, которые пишут эти статические классы и статические методы, я не вижу причины (за пределами возможной политики офиса), почему вы не могли этого сделать, внедряя политику.

Если вы должны сделать это с помощью кода, я думаю, вы застряли с интерфейсом и методами экземпляра.

Если вы хотите, чтобы эти методы экземпляра были созданы, вы могли бы написать статические вспомогательные классы в качестве оберток (так что вам лично не нужно создавать объекты каждый раз), но я не знаю, получите что-нибудь.

+0

Причина, по которой я хочу это сделать, заключается в том, что я не буду применять все классы, о которых идет речь. Мне не нужны перегрузки для чего-либо, потому что методы принимают переменную, являющуюся экземпляром класса, свойства которого разрешены. Что вы имеете в виду с последним абзацем? Я не могу переписывать методы в статических классах? Вызов 1, 2, затем 3, а затем 2? Я искал переводчика Google для этого слова, но не уверен, что вы имеете в виду. Прочтите раздел редактирования вопроса. Благодаря! –

+0

@Fabio Milherio: Если у меня есть 'static class Foo' с методом' DoStuff() 'и' static class Bar' с методом 'DoStuff', мне еще нужно указать, какой класс мне нужен:' Foo.DoStuff() 'или' Bar.DoStuff() ' – AllenG

Смежные вопросы