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

Поиск:

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


Опытный
**


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

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



доброй ночи =)
есть класс-родитель
Код

    class Serialization
    {
        public byte[] GetBytes()
        {
            var stream = new MemoryStream();
            var formatter = new BinaryFormatter();
            formatter.Serialize(stream, this);
            var result = stream.ToArray();
            stream.Close();
            return result;
        }

        public static object GetObject(byte[] Data)
        {
            var stream = new MemoryStream(Data);
            var formatter = new BinaryFormatter();
            var result = formatter.Deserialize(stream);
            stream.Close(); 
            return result;
        }
    }

как сделать так, чтобы можно было делать так
Код

    public class Test:Serialization
    {
        string TestString;
    }

...
            Test t = Test.GetObject(data);
...


т.е. чтобы метод GetObject(byte[] Data) возвращал тип Test  ?


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


Опытный
**


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

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



Ну для начала конструктор сделай

Это сообщение отредактировал(а) Dobermann - 24.1.2010, 10:00
PM   Вверх
gambit
Дата 24.1.2010, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

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



Цитата(Dobermann @  24.1.2010,  09:56 Найти цитируемый пост)
Ну для начала конструктор сделай

зачем????


Цитата(uranpro @  24.1.2010,  03:23 Найти цитируемый пост)
т.е. чтобы метод GetObject(byte[] Data) возвращал тип Test  ? 

1. Переопредели метод GetObject в классе Test, ну а что бы он возвращал Test, наверное никак, скорее всего придется приводить его к Test уже в коде

Код

var q = Test.GetObject(data);
Test t = (Test)q;

PM MAIL ICQ Skype   Вверх
Экскалупатор
Дата 24.1.2010, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



uranpro, что то я тебя не совсем понял.
ты хочешь таким образом создавать экземпляр класса Test? это наверное вариация на тему паттерна Singleton.
для этого тебе надо создавать экземпляр класса Test внутри самого класса. потом переопределить метод GetObject(data) в классе Test, что бы он возвращал этот экземпляр.

PM MAIL ICQ   Вверх
uranpro
Дата 24.1.2010, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Экскалупатор, а разве у меня не создается экземпляр
Код

var result = formatter.Deserialize(stream);

и еще нужно оставлять пустым тело конструктора из-за сериализации, если не ошибаюсь.

т.е. без преобразования никак ?

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


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


Опытный
**


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

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



gambit, а как его переопределить, он статический, я потеряю base.GetObject(Data), если не ошибаюсь =)

Добавлено @ 13:06
"ключевое слово base неприемлемо в статических методах"

Добавлено через 10 минут и 18 секунд
можно сделать так, но придется в каждом наследнике определять GetИмяТипа(Data)
Код

    class Serialization
    {
        public byte[] GetBytes()
        {
            var stream = new MemoryStream();
            var formatter = new BinaryFormatter();
            formatter.Serialize(stream, this);
            var data = stream.ToArray();
            var result = new byte[data.Length + 4];
            stream.Close();
            Array.Copy(BitConverter.GetBytes(data.Length), 0, result, 0, 4);
            Array.Copy(data, 0, result, 4, data.Length);
            return result;
        }

        protected static object GetObject(byte[] Data)
        {
            var stream = new MemoryStream(Data);
            var formatter = new BinaryFormatter();
            var result = formatter.Deserialize(stream);
            stream.Close(); 
            return result;
        }
    }

Код

    public class Test : Serialization
    {
        public string TestString { get; set; }

        public static Test GetTest(byte[] Data)
        {
            return (Test)GetObject(Data);
        }
    }
...
Test t = Test.GetTest(data);
...


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


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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



Цитата(uranpro @  24.1.2010,  12:04 Найти цитируемый пост)
а как его переопределить, он статический, я потеряю base.GetObject(Data)

к нему можно обратиться через класс который его реализует. у тебя же статический метод, экземпляр создавать не надо.
PM MAIL ICQ   Вверх
gambit
Дата 24.1.2010, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

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



Цитата(uranpro @  24.1.2010,  13:04 Найти цитируемый пост)
gambit, а как его переопределить

я не подумал что base.GetObject(Data) и GetObject(Data) должны возвращать одно и тоже значение, я думал что в классе Test, этот метод изменится. Прошу прощения за невнимательность.
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

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


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

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


 




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


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

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