Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Partial class, наследование, конструктор копии / 15 сообщений из 15, страница 1 из 1
22.06.2015, 11:18
    #38989478
SergMCMLXXX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Partial class, наследование, конструктор копии
Есть сервер и клиент
класс на сервере
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public class Order
{
   //какие то данные
   public static void SaveToFile(Order Ord, string FileName)
   {
      //сериализация
   }
   public static Order LoadFromFile(string FileName)
   {
      //десериализация
   }
{
}


теперь на клиенте нужен такой же класс но для него необходимы дополнительные методы для взаимодействия с пользователем и сервером и static члены.
Как понимаю partial в разных сборках нельзя.
Делаю наследование.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class OrderClient:Order
{
   //какие то static данные
   //какие то методы
   public static void SaveToFile(OrderClient Ord, string FileName)
   {
      //тут всё просто
     Order.SaveToFile(Ord, FileName);
   }
   public static OrderClient LoadFromFile(string FileName)
   {
      //ааа что делать тут???
   }
}



вариант сделать конструктор, и конструктор копии для базового класса
Код: c#
1.
2.
3.
   public OrderClient(Order Ord):Base(Ord)
   {
   }



Далее начинаю разбираться с конструктором копии для базового класса, натыкаюсь на
Object MemberwiseClone()
и понимаю я попал, единственный путь вручную самостоятельно делать конструктор копии.

Вопрос.
Я всё правильно описал или где то ошибся?
Есть ли ошибка в выбранной архитектуре?
...
Рейтинг: 0 / 0
22.06.2015, 11:41
    #38989499
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Partial class, наследование, конструктор копии
SergMCMLXXX, "конструктор копии" ухо режет, да и как-то сам этот термин не вяжется с контекстом решаемой задачи... на что вы там натыкаетесь - не ясно... посмотрите чтонить из многочисленных реализаций deep copy
И на языке вертится... "инкапсуляция" :)
...
Рейтинг: 0 / 0
22.06.2015, 11:58
    #38989512
SergMCMLXXX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Partial class, наследование, конструктор копии
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
public class Order
{
   //....
   public Order(Order Ord)
   {
        ;здесь нужно сделать копию с Ord, а как, только вручную?
   }
}

public class OrderClient:Order
{
   //...
   public static void SaveToFile(OrderClient Ord, string FileName)
   {
      //тут всё просто
     Order.SaveToFile(Ord, FileName);
   }
   public OrderClient(Order Ord):Base(Ord)
   {
       ;
   }
   public static OrderClient LoadFromFile(string FileName)
   {
      Order Temp=Order.LoadFromFile(FileName);
      OrderClient Ret=new OrderClient(Temp);
      return Ret;
   }
}
...
Рейтинг: 0 / 0
22.06.2015, 12:23
    #38989538
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Partial class, наследование, конструктор копии
SergMCMLXXX,
Я так и не понял как связаны три термина в заглавии топика с вопросом. И что значит сервер и клиент? названия объектов? Для чего нужен такой же класс на клиенте? Ничего не понятно, можно попросить Вас сформулировать вопрос яснее?
...
Рейтинг: 0 / 0
22.06.2015, 12:44
    #38989561
SergMCMLXXX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Partial class, наследование, конструктор копии
AxeleronSergMCMLXXX,
Я так и не понял как связаны три термина в заглавии топика с вопросом. И что значит сервер и клиент? названия объектов? Для чего нужен такой же класс на клиенте? Ничего не понятно, можно попросить Вас сформулировать вопрос яснее?
1. Три термина связаны таким образом, что ограничения одного требует использование следующего и в конечном итоге заканчивается Object MemberwiseClone() , из которого конструктор базового класса не сделать. Соответственно появляются вопросы:
Я всё правильно описал или где то ошибся?
Есть ли ошибка в выбранной архитектуре?

Клиент/серверное приложение. Есть 2 различных типа клиента. На одном .NET клиенте пользователь обрабатывает заказ (диалоги не нужны ни серверу ни второму клиенту) сохраняет в файл и отправляет его на сервер. Второй клиент (1с) обращается к серверу с именем файла загружает его в сервер и получает все данные из этого заказа, но в формате СтрокаВнутр.
...
Рейтинг: 0 / 0
22.06.2015, 13:14
    #38989593
Partial class, наследование, конструктор копии
SergMCMLXXX,

Не понимаю зачем ты static понавтыкал? О каком наследовании может идти речь?! static нужен для того, чтобы мы пользовались классом как контейнером без его создания. Примером может служить класс Math с функцицией Math.ABS. Ясное дело мы не можем от такого класса унаследоваться. Может я чего-то не так понимаю?!
...
Рейтинг: 0 / 0
22.06.2015, 13:31
    #38989610
SergMCMLXXX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Partial class, наследование, конструктор копии
Новопашин ВладимирSergMCMLXXX,

Не понимаю зачем ты static понавтыкал? О каком наследовании может идти речь?! static нужен для того, чтобы мы пользовались классом как контейнером без его создания. Примером может служить класс Math с функцицией Math.ABS. Ясное дело мы не можем от такого класса унаследоваться. Может я чего-то не так понимаю?!
При чём тут статики, они просто загружают сохраняют в файл. Смысл в том что и базовый и производный класс должны сериализоваться и десериализоваться в/из одного и того же файла:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
public class Order
{
   //какие то данные
   public static void SaveToFile(Order Ord, string FileName)
   {
            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Order));
            using (FileStream stream = new FileStream(FileName, FileMode.OpenOrCreate))
            {
                stream.SetLength(0);
                ser.WriteObject(stream, Ord);
            }
   }
   public static Order LoadFromFile(string FileName)
   {
            Order RetVal = null;
            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Order));
            using (FileStream stream = new FileStream(FileName, FileMode.Open))
            {
                RetVal = (Order)ser.ReadObject(stream);
            }
            return RetVal;
   }
}



Или может не извращаться с конструктором, а сразу сделать эти 2 функции для производного класса OrderClient, но что то как то кривовато.
...
Рейтинг: 0 / 0
22.06.2015, 14:28
    #38989688
Partial class, наследование, конструктор копии
SergMCMLXXXНовопашин ВладимирSergMCMLXXX,

Не понимаю зачем ты static понавтыкал? О каком наследовании может идти речь?! static нужен для того, чтобы мы пользовались классом как контейнером без его создания. Примером может служить класс Math с функцицией Math.ABS. Ясное дело мы не можем от такого класса унаследоваться. Может я чего-то не так понимаю?!
При чём тут статики, они просто загружают сохраняют в файл. Смысл в том что и базовый и производный класс должны сериализоваться и десериализоваться в/из одного и того же файла:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
public class Order
{
   //какие то данные
   public static void SaveToFile(Order Ord, string FileName)
   {
            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Order));
            using (FileStream stream = new FileStream(FileName, FileMode.OpenOrCreate))
            {
                stream.SetLength(0);
                ser.WriteObject(stream, Ord);
            }
   }
   public static Order LoadFromFile(string FileName)
   {
            Order RetVal = null;
            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Order));
            using (FileStream stream = new FileStream(FileName, FileMode.Open))
            {
                RetVal = (Order)ser.ReadObject(stream);
            }
            return RetVal;
   }
}



Или может не извращаться с конструктором, а сразу сделать эти 2 функции для производного класса OrderClient, но что то как то кривовато.

Я в упор не вижу базового и производного класса.

Вот я наваял код.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
    public class A
    {

        public void Method1()
        {
            Console.WriteLine("Method1");
        }

        public static void Method2()
        {
            Console.WriteLine("Method2");
        }
    }

    public  class B : A
    {
        public void Method3()
        {
            base.Method1();
            A.Method2();
        }
    }



Смысл следующий - класс A, базовый, класс B производный. В базовом классе я сделал метод класса Method1 и метод экземпляра класса A (со словом static). В классе B, показываю как ими воспользоваться. Класс B наследует метод базового класса A Method1, а методом Method2, он может воспользоваться не создавая класс, а просто вызвав экземляр класса A - A.Method2.

В твоем случае ни о каком наследовании речи не идет - просто тупо вызывает контейнеры классов.

Зачем ты строчке
Код: c#
1.
OrderClient:Order

, наследуешься, когда в функции
Код: c#
1.
SaveToFile

, ты и так вызываешь экземплярный метод
Код: c#
1.
Order.SaveToFile(Ord, FileName)

. В данном случае наследование не причем. Ты просто тупо кидаешь ссылку на библиотеку и пользуешься ей.
Наследование предполагает нечто иное.
Если тебе надо воспользоваться уже готовым кодом, то static точно нужно убрать или следуя твоей логике на сервере нужно написать вызов экземпляра класса Order.LoadFromFile(FileName) - но еще раз повторю - это нихрена не наследование.
...
Рейтинг: 0 / 0
22.06.2015, 15:28
    #38989793
SergMCMLXXX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Partial class, наследование, конструктор копии
Новопашин Владимир...
Наследование необходимо для всех остальных функций (которые здесь не указаны), а статики переопределяются, в производном классе добавляются ещё функции и статик данные (которые в файл сохранять не надо т.к. они нужны только для взаимодействия клиента с сервером и редактирования заказа). Смысл чтобы из файла можно было прочитать объект как в базовый так и в производный класс.
...
Рейтинг: 0 / 0
22.06.2015, 15:36
    #38989806
SergMCMLXXX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Partial class, наследование, конструктор копии
И при этом не делать конструктор типа
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public Order(Order Ord)
{
   this.Member1=Ord.Member1;
   this.Member2=Ord.Member2;
   ...
   this.MemberN=Ord.MemberN;
}
для
public OrderClient(Order Ord):base(Ord)
{
  ;
}


к чему такие сложности если есть MemberwiseClone, но как его здесь использовать и можно ли вообще, не пойму.
...
Рейтинг: 0 / 0
22.06.2015, 16:05
    #38989844
Partial class, наследование, конструктор копии
SergMCMLXXXа статики переопределяются
Статики не переопределяются
Статические классы запечатаны, поэтому их нельзя наследовать. Они не могут быть унаследованы ни от каких классов, кроме Object. Статические классы не могут содержать конструктор экземпляров, но могут содержать статический конструктор.
Вот здесь можно подробнее посмотреть.
https://msdn.microsoft.com/ru-ru/library/79b3xss3.aspx
...
Рейтинг: 0 / 0
22.06.2015, 16:09
    #38989849
Partial class, наследование, конструктор копии
SergMCMLXXXИ при этом не делать конструктор типа
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public Order(Order Ord)
{
   this.Member1=Ord.Member1;
   this.Member2=Ord.Member2;
   ...
   this.MemberN=Ord.MemberN;
}
для
public OrderClient(Order Ord):base(Ord)
{
  ;
}


к чему такие сложности если есть MemberwiseClone, но как его здесь использовать и можно ли вообще, не пойму.

В этот момент приходим к дзен. Зачем нужно было плодить столько классов - почему и главное для чего это было сделано?!
Сдается мне, TC чего-то не договаривает.
...
Рейтинг: 0 / 0
22.06.2015, 17:26
    #38989948
petalvik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Partial class, наследование, конструктор копии
SergMCMLXXX,

если на "клиенте" доступны статические методы класса, определённого на "сервере", то почему не использовать сам класс?! И не нужен никакой дополнительный класс.

Тем не менее, покажу плохой пример:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
[DataContract]
class Order
{
    [DataMember]
    public string Foo { get; set; }
    [DataMember]
    public int Bar { get; set; }

    public static void SaveToFile<T>(T order, string fileName)
    {
        DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
        using (FileStream stream = new FileStream(fileName, FileMode.OpenOrCreate))
        {
            stream.SetLength(0);
            ser.WriteObject(stream, order);
        }
    }
    public static T LoadFromFile<T>(string fileName)
    {
        T RetVal = default(T);
        DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
        using (FileStream stream = new FileStream(fileName, FileMode.Open))
        {
            RetVal = (T)ser.ReadObject(stream);
        }
        return RetVal;
    }
}

[DataContract]
class OrderClient
{
    [DataMember]
    public string Foo { get; set; }
    [DataMember]
    public int Bar { get; set; }
}


Применяем генерики.
Использование:
Код: c#
1.
2.
3.
4.
5.
Order order = new Order { Foo = "foo", Bar = 123 };
Order.SaveToFile(order, "test.txt");

OrderClient order2 = Order.LoadFromFile<OrderClient>("test.txt");
Console.WriteLine(order2.Foo + " " + order2.Bar);


Json-сериализация (как и xml) удобна тем, что можно одни и те же данные мапить на разные классы.
...
Рейтинг: 0 / 0
22.06.2015, 18:47
    #38990029
SergMCMLXXX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Partial class, наследование, конструктор копии
petalvik...
Сам класс использовать можно, потому что сборка сервера включена в клиента. Но функциональности класса от сервера недостаточно, на клиенте есть дополнительные методы для редактирования заказа пользователем с формами которые серверу не нужны, дополнительные методы для проверки корректности заказа на сервере и еще один допустимый для чтения формат файла, который серверу не нужен.
...
Хотя может объединить клиент и сервер в одну сборку, а потом использовать ее по разному из приложений клиента и сервера, тогда вообще никаких проблем не будет?
...
Рейтинг: 0 / 0
23.06.2015, 10:39
    #38990393
SergMCMLXXX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Partial class, наследование, конструктор копии
petalvik...
Мой вариант вообще не прокатил с ошибкой при сериализации.
А вот с генериком сработал, спасибо!
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Partial class, наследование, конструктор копии / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]