Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Методы интерфейса как static, каким обрзаом ?? 
:(
    Опции темы
StepS
Дата 25.10.2005, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 26.8.2005
Где: Днепропетровск

Репутация: нет
Всего: нет



есть интерфейс IMyInterface нужно написать класс у которого методы этого интерфейса являются статическими. типа такого:
Код

interface IMyInterface{
  void PrintHello();
}

class MyClass:IMyInterface{
  public static void PrintHello(){
    Console.WriteLine("Hello world");
  }
}


но так нельзя ! я не могу понять почему (сам новичок в С#) ? Объясните плз. почему так нельзя и как нужно правильно !
PM MAIL ICQ   Вверх
Void
Дата 25.10.2005, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 25
Всего: 173



А в чем смысл такого объявления? Интерфейсы предназначены для того, чтобы работать с объектами полиморфно.
Цитата(StepS @ 25.10.2005, 17:33)
Объясните плз. почему так нельзя и как нужно правильно !

А из-за чего возникла такая необходимость?


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Exception
Дата 25.10.2005, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



вместо интерфейса юзай абстракт. класс
PM   Вверх
StepS
Дата 26.10.2005, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 26.8.2005
Где: Днепропетровск

Репутация: нет
Всего: нет



спасибо Run-time error. Об обстрактных я как-то забыл smile
Необходимость возникла из-за того что у нескольких классов есть одинаковый интерфейс, а статик нужно для работы с singleton-ом
PM MAIL ICQ   Вверх
Hidrag
Дата 26.10.2005, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 877
Регистрация: 9.4.2005
Где: JDK

Репутация: 2
Всего: 25



.... а статик нужно для работы с singleton-ом

а это что такое?


--------------------
user posted image
PM WWW ICQ   Вверх
stab
Дата 26.10.2005, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



Цитата(Run @ 25.10.2005, 22:00)
вместо интерфейса юзай абстракт. класс


Дык, статические члены всеравно абстрактными быть не могут. ИМХО, придется создавать объекты, т.к. статически полиморфность не реализовать.


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
arilou
Дата 27.10.2005, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(StepS @ 26.10.2005, 10:45)
Необходимость возникла из-за того что у нескольких классов есть одинаковый интерфейс, а статик нужно для работы с singleton-ом

А для чего тебе интерфейс "для работы с синглтоном". Поясни пожалуйста. У меня очень сильное подозрение, что все что тебе надо делается без интерфейсов.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Domestic Cat
Дата 28.10.2005, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Не понял, где в приведенном коде синглтон. Помнится, статиком должен быть только один метод, который оверрайдить нет смысла.


--------------------

PM   Вверх
mr.DUDA
Дата 28.10.2005, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(Domestic @ 28.10.2005, 08:23)
Не понял, где в приведенном коде синглтон

В его коде этого нету.

Решение может быть найдено следующим способом. Если нужно, чтобы все классы, реализующие интерфейс, являлись синглтонами, можно завести в интерфейсе метод или свойство, возвращающий ссылку на единственный объект этого типа:
Код
interface ISingleton
{
    ISingleton Instance {get;}
}

class MyClass : ISingleton
{
    // реализация интерфейса ISingleton
    public ISingleton Instance
    {
        get
        {
            if(_instance == null)
                _instance = new MyClass();
            return _instance;
        }
    }

    static MyClass _instance;

    // прячем конструктор, чтобы объект нельзя было создать явно
    internal MyClass() {}
}



--------------------
user posted image
PM MAIL WWW   Вверх
Exception
Дата 28.10.2005, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



.. как и сделано в самом дотнете
PM   Вверх
mr.DUDA
Дата 29.10.2005, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(Run @ 28.10.2005, 16:45)
.. как и сделано в самом дотнете

Пример ?


--------------------
user posted image
PM MAIL WWW   Вверх
Exception
Дата 29.10.2005, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Код

System.Reflection.Missing.Value 'Свойство указывает на единственный экземпляр

PM   Вверх
mr.DUDA
Дата 30.10.2005, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Ну, это не совсем то smile

Missing.Value, DBNull.Value, float.Epsilon, int.MinValue и пр. - это как бы служебные константы, предназначенные для операций сравнения и ни для чего более; кроме того, в рамках одного класса их может быть несколько (int.MaxValue). Класс-синглтон говорит окружающему миру: есть только 1 экземпляр объекта, и предоставляет доступ к этому экземпляру через (обычно) статическое свойство или метод.


--------------------
user posted image
PM MAIL WWW   Вверх
Exception
Дата 30.10.2005, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



ну да.
но помню - был такой, а кто именно не помню..
PM   Вверх
arilou
Дата 31.10.2005, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(mr @ 28.10.2005, 14:24)
можно завести в интерфейсе метод или свойство, возвращающий ссылку на единственный объект этого типа

А смысл? Ведь все равно к св-ву Instance без создания объекта не обратишься. Мое имхо, через интерфейсы это нереализуемо.

Можно сделать на шаблонах (.NET 2.0), что-то вроде

Код

public class Singleton<T> where T: new
{
  private static T _inst = null;
  public static T Instance
  {
    get 
    { 
        if(_inst == null)
          _inst = new T();

        return _inst;
  }
}


Ну и юзаем так:

Код

public MySingletonClass : Singleton<MySingletonClass>
{
   public void Foo()
   {
   }
}

MySingletonClass.Instance.Foo();


Недостаток этого подхода в том, что нельзя у класса T (MySingletonClass в примере) объявить не-public конструктор, иначе where T: new не будет работать.

А вообще - зачем все это? smile


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0695 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.