powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Partial class, наследование, конструктор копии
15 сообщений из 15, страница 1 из 1
Partial class, наследование, конструктор копии
    #38989478
Фотография SergMCMLXXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть сервер и клиент
класс на сервере
Код: 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
Partial class, наследование, конструктор копии
    #38989499
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergMCMLXXX, "конструктор копии" ухо режет, да и как-то сам этот термин не вяжется с контекстом решаемой задачи... на что вы там натыкаетесь - не ясно... посмотрите чтонить из многочисленных реализаций deep copy
И на языке вертится... "инкапсуляция" :)
...
Рейтинг: 0 / 0
Partial class, наследование, конструктор копии
    #38989512
Фотография 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.
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
Partial class, наследование, конструктор копии
    #38989538
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergMCMLXXX,
Я так и не понял как связаны три термина в заглавии топика с вопросом. И что значит сервер и клиент? названия объектов? Для чего нужен такой же класс на клиенте? Ничего не понятно, можно попросить Вас сформулировать вопрос яснее?
...
Рейтинг: 0 / 0
Partial class, наследование, конструктор копии
    #38989561
Фотография SergMCMLXXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronSergMCMLXXX,
Я так и не понял как связаны три термина в заглавии топика с вопросом. И что значит сервер и клиент? названия объектов? Для чего нужен такой же класс на клиенте? Ничего не понятно, можно попросить Вас сформулировать вопрос яснее?
1. Три термина связаны таким образом, что ограничения одного требует использование следующего и в конечном итоге заканчивается Object MemberwiseClone() , из которого конструктор базового класса не сделать. Соответственно появляются вопросы:
Я всё правильно описал или где то ошибся?
Есть ли ошибка в выбранной архитектуре?

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

Не понимаю зачем ты static понавтыкал? О каком наследовании может идти речь?! static нужен для того, чтобы мы пользовались классом как контейнером без его создания. Примером может служить класс Math с функцицией Math.ABS. Ясное дело мы не можем от такого класса унаследоваться. Может я чего-то не так понимаю?!
...
Рейтинг: 0 / 0
Partial class, наследование, конструктор копии
    #38989610
Фотография 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, но что то как то кривовато.
...
Рейтинг: 0 / 0
Partial class, наследование, конструктор копии
    #38989688
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
Partial class, наследование, конструктор копии
    #38989793
Фотография SergMCMLXXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Новопашин Владимир...
Наследование необходимо для всех остальных функций (которые здесь не указаны), а статики переопределяются, в производном классе добавляются ещё функции и статик данные (которые в файл сохранять не надо т.к. они нужны только для взаимодействия клиента с сервером и редактирования заказа). Смысл чтобы из файла можно было прочитать объект как в базовый так и в производный класс.
...
Рейтинг: 0 / 0
Partial class, наследование, конструктор копии
    #38989806
Фотография 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, но как его здесь использовать и можно ли вообще, не пойму.
...
Рейтинг: 0 / 0
Partial class, наследование, конструктор копии
    #38989844
SergMCMLXXXа статики переопределяются
Статики не переопределяются
Статические классы запечатаны, поэтому их нельзя наследовать. Они не могут быть унаследованы ни от каких классов, кроме Object. Статические классы не могут содержать конструктор экземпляров, но могут содержать статический конструктор.
Вот здесь можно подробнее посмотреть.
https://msdn.microsoft.com/ru-ru/library/79b3xss3.aspx
...
Рейтинг: 0 / 0
Partial class, наследование, конструктор копии
    #38989849
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
Partial class, наследование, конструктор копии
    #38989948
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Partial class, наследование, конструктор копии
    #38990029
Фотография SergMCMLXXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petalvik...
Сам класс использовать можно, потому что сборка сервера включена в клиента. Но функциональности класса от сервера недостаточно, на клиенте есть дополнительные методы для редактирования заказа пользователем с формами которые серверу не нужны, дополнительные методы для проверки корректности заказа на сервере и еще один допустимый для чтения формат файла, который серверу не нужен.
...
Хотя может объединить клиент и сервер в одну сборку, а потом использовать ее по разному из приложений клиента и сервера, тогда вообще никаких проблем не будет?
...
Рейтинг: 0 / 0
Partial class, наследование, конструктор копии
    #38990393
Фотография SergMCMLXXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petalvik...
Мой вариант вообще не прокатил с ошибкой при сериализации.
А вот с генериком сработал, спасибо!
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Partial class, наследование, конструктор копии
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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