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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вопрос, ооп 
:(
    Опции темы
uranpro
  Дата 11.3.2010, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



добрый день!

в ооп новичок, помогите разобраться
есть класс родитель
Код

public class CustomWork
    {
        static protected abstract void Do(object state);

        static public void DoWork(byte[] state)
        {
            Do(MyType.FromBytes(state));// допустим, есть такой тип, который переводит байты в объект
        }

        static public void DoWork(object state)
        {
            Do(state);
        }
    }

сын
Код

public static class Work1 : CustomWork
    {
        protected override void Do(object state)
        {
            //выполняется какая-то работа
        }
    }

использование
Код

//вариант 1
Work1.DoWork(SomeBytes);
//вариант 2
Work1.DoWork(SomeObject);

т.е. я хочу создавать статические классы, и не определять постоянно 2 перегрузки DoWork(они везде одинаковые), а переопределять только работу (Do). 

код с ошибками, компилятор ругается =(


Это сообщение отредактировал(а) uranpro - 11.3.2010, 12:26


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
Kanes
Дата 11.3.2010, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



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

Ну а для затравки - статические классы должны содержать только статические члены!
--------------------
Big gun - big future  
PM MAIL   Вверх
uranpro
Дата 11.3.2010, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Kanes, ошибки типа 
Ошибка    2    Статический член "T1.Work.Do(object)" не может быть помечен как override, virtual или abstract    \Projects\NewTesting\T1\asd.cs    26    30    T1
Ошибка    1    "T1.Work.Do(object)": виртуальные и абстрактные члены не могут быть закрытыми    \Projects\NewTesting\T1\asd.cs    24    30    T1

я перебирал варианты, следуя подсказкам VS, что-то уже напутал...

код
Код

    public class CustomWork
    {
        static protected abstract void Do(object state);

        static public void DoWork(byte[] state)
        {
            Do(Convert.ToString(state));// допустим, есть такой тип, который переводит байты в объект
        }

        static public void DoWork(object state)
        {
            Do(state);
        }
    }

    public static class Work1 : CustomWork
    {
        static protected override void Do(object state)
        {
            System.Diagnostics.Debug.WriteLine(Convert.ToString(state));
        }
    }

ошибки
Ошибка    1    Статический член "T1.CustomWork.Do(object)" не может быть помечен как override, virtual или abstract    \Projects\NewTesting\T1\asd.cs    9    40    T1
Ошибка    2    Статический класс "T1.Work1" не может быть производным от типа "T1.CustomWork". Статические классы должны быть производными от object.    \Projects\NewTesting\T1\asd.cs    22    33    T1
Ошибка    3    Статический член "T1.Work1.Do(object)" не может быть помечен как override, virtual или abstract    \Projects\NewTesting\T1\asd.cs    24    40    T1

Добавлено через 56 секунд
Код

            Work1.DoWork(Encoding.UTF8.GetBytes("Hellow1"));
            Work1.DoWork("Hellow2");



--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
Kanes
Дата 11.3.2010, 12:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



И так ,смотрим по тексту ошибок и заодно в MSDN
Цитата(MSDN)

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


вообще есть подозрение что вы зря тут решили использовать статические классы

Это сообщение отредактировал(а) Kanes - 11.3.2010, 13:02
--------------------
Big gun - big future  
PM MAIL   Вверх
CYBERDREAM
Дата 11.3.2010, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


Профиль
Группа: Завсегдатай
Сообщений: 1096
Регистрация: 31.10.2006
Где: CyberLand

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



Код

public class CustomWork
    {
        static protected abstract void Do(object state);

        static public void DoWork(byte[] state)
        {
            Do(Convert.ToString(state));// допустим, есть такой тип, который переводит байты в объект
        }

        static public void DoWork(object state)
        {
            Do(state);
        }
    }

    public class Work1 : CustomWork // Статик класс не может быть унаследован, либо сам является наследником
    {
        protected override void Do(object state) // нельзя переопределять стат. методы и свойства
        {
            System.Diagnostics.Debug.WriteLine(Convert.ToString(state));
        }
    }


Добавлено через 27 секунд
Зачем вообще тебе статики? 


--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
Kanes
Дата 11.3.2010, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



забыл ссылку дать на МСДН:
Статические классы
--------------------
Big gun - big future  
PM MAIL   Вверх
uranpro
Дата 11.3.2010, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Kanes, это понятно, разве нельзя обойти все это ?
не зря, т.к. есть класс, который определяет какую работу делать. я хочу, чтобы работа начиналось по одной строчке, через статический класс, зачем мне плодить переменные =( этих работ сейчас ~ 20 и некоторые с переменными, очень не удобно.
Код

            switch (Work)
            {
                Works.Work1:
                    Work1.DoWork(state);
                    break;
                Works.Work2:
                    Work2.DoWork(state);
                    break;
                ...
            }



--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
CYBERDREAM
Дата 11.3.2010, 13:11 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


Профиль
Группа: Завсегдатай
Сообщений: 1096
Регистрация: 31.10.2006
Где: CyberLand

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



Цитата

Kanes, это понятно, разве нельзя обойти все это ? 
 smile 
переписать C#)

Прийдется выбирать что то одно, так не выйдет как ты хочешь



Это сообщение отредактировал(а) CYBERDREAM - 11.3.2010, 13:13


--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
Kanes
Дата 11.3.2010, 13:14 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(uranpro @  11.3.2010,  13:07 Найти цитируемый пост)
Kanes, это понятно, разве нельзя обойти все это ?

А зачем городить не весь что? smile 
Надо понимать зачем нужны статические классы, часто проще использовать статические члены в нестатических классах, чем весь клас делать static

--------------------
Big gun - big future  
PM MAIL   Вверх
CYBERDREAM
Дата 11.3.2010, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


Профиль
Группа: Завсегдатай
Сообщений: 1096
Регистрация: 31.10.2006
Где: CyberLand

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



мне кажется тебе надо для начала прочитать инфу по ссылке что дал Kanes. У тебя нет понимания работы со стат. классами и не стат.


--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
uranpro
Дата 11.3.2010, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



короче, склифосовский =)
вот(кажется, называется синглетон)
Код

    public abstract class CustomWork
    {
        protected abstract void Do(object state);

        public void DoWork(byte[] state)
        {
            Do(Convert.ToString(state));// допустим, есть такой тип, который переводит байты в объект
        }

        public void DoWork(object state)
        {
            Do(state);
        }
    }

    public class Work1 : CustomWork
    {
        protected override void Do(object state)
        {
            System.Diagnostics.Debug.WriteLine(Convert.ToString(state));
        }

        public static Work1 Instance
        {
            get { return new Work1(); }
        }
    }

обращение
Код

Work1.Instance.DoWork("Hellow2");



--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
Kanes
Дата 11.3.2010, 13:30 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



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

Добавлено @ 13:33
Если уж заговорили про Синглтон, то он вот так реализуется:
Код

class Singleton
{

    private static Singleton _instance;

    protected Singleton()
    {
    }

    public static Singleton Instance()
    {

      if (_instance == null)
      {
        _instance = new Singleton();
      }

      return _instance;
    }
  }


Это сообщение отредактировал(а) Kanes - 11.3.2010, 13:34
--------------------
Big gun - big future  
PM MAIL   Вверх
uranpro
Дата 11.3.2010, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
CYBERDREAM
Дата 11.3.2010, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


Профиль
Группа: Завсегдатай
Сообщений: 1096
Регистрация: 31.10.2006
Где: CyberLand

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





--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
uranpro
Дата 11.3.2010, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



http://ru.wikipedia.org/wiki/%D0%9E%D0%B4%...%D0%B8%D1%8F%29

Добавлено через 8 минут и 53 секунды
а что лучше в моем случае, одна ссылка или несколько ?
Work1.Instance.DoWork(...) вызывается из разных потоков, может одновременно.


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

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


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

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


 




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


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

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