powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Наследование, struct
25 сообщений из 36, страница 1 из 2
Наследование, struct
    #36600318
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а почему в C# нет наследования структур?

С уважением, Naf
...
Рейтинг: 0 / 0
Наследование, struct
    #36600350
ITmonstrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Naf,

Потому что это не ссылочный тип у которого есть свои преимущества и свои недостатки. Из разряда вопросов почему нет наследования int?
...
Рейтинг: 0 / 0
Наследование, struct
    #36600384
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ITmonstrikNaf,

Потому что это не ссылочный тип у которого есть свои преимущества и свои недостатки. Из разряда вопросов почему нет наследования int?Ага, но все же
...
Рейтинг: 0 / 0
Наследование, struct
    #36600414
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Было бы удобно в плане:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
struct A
{
    public int X;
}
struct B:A
{
    public int Y;
}
A a = new A();
a.X = 10;
B b = a;
b.X++;
//b.X равен 11 
//a.X равен 10 
...
Рейтинг: 0 / 0
Наследование, struct
    #36600432
comphead
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NafБыло бы удобно в плане:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
struct A
{
    public int X;
}
struct B:A
{
    public int Y;
}
A a = new A();
a.X = 10;
B b = a;
b.X++;
//b.X равен 11 
//a.X равен 10 


чем для вас класс хуже?
то что он ссылочный и располагается в куче?
...
Рейтинг: 0 / 0
Наследование, struct
    #36600462
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
comphead
чем для вас класс хуже?
то что он ссылочный и располагается в куче?
в классе будет:
Код: plaintext
1.
2.
//b.X равен 11 
//a.X равен 11, а мне нужно 10 
...
Рейтинг: 0 / 0
Наследование, struct
    #36600465
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а так приходится писать имплицит/эксплицит операторы
...
Рейтинг: 0 / 0
Наследование, struct
    #36600497
comphead
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nafа так приходится писать имплицит/эксплицит операторы

реализуйте интерфейс IClonealbe
...
Рейтинг: 0 / 0
Наследование, struct
    #36600502
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
compheadреализуйте интерфейс IClonealbe
Это ничего не решит
...
Рейтинг: 0 / 0
Наследование, struct
    #36600507
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
compheadNafа так приходится писать имплицит/эксплицит операторы
реализуйте интерфейс IClonealbe надо кучу кода писать ручками, да и возвращает он object
...
Рейтинг: 0 / 0
Наследование, struct
    #36600511
comphead
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nafcompheadреализуйте интерфейс IClonealbe
Это ничего не решит

может поподробнее расскажете о задаче.

Код: plaintext
1.
2.
3.
A a = new A();
a.X = 10;
B b = a.Clone();
b.X++;

a.X = 10;
b.X = 11;
...
Рейтинг: 0 / 0
Наследование, struct
    #36600517
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
compheadNafcompheadреализуйте интерфейс IClonealbe
Это ничего не решит

может поподробнее расскажете о задаче.

Код: plaintext
1.
2.
3.
A a = new A();
a.X = 10;
B b = a.Clone();
b.X++;

a.X = 10;
b.X = 11;
Clone() надо еще ручками реализовать, да и возвращает он object
...
Рейтинг: 0 / 0
Наследование, struct
    #36600526
comphead
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NafcompheadNafcompheadреализуйте интерфейс IClonealbe
Это ничего не решит

может поподробнее расскажете о задаче.

Код: plaintext
1.
2.
3.
A a = new A();
a.X = 10;
B b = a.Clone();
b.X++;

a.X = 10;
b.X = 11;
Clone() надо еще ручками реализовать, да и возвращает он object

разумеется. а в программировании все так. :)
ручками реализовывать то. )
...
Рейтинг: 0 / 0
Наследование, struct
    #36600532
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
compheadNafcompheadNafcompheadреализуйте интерфейс IClonealbe
Это ничего не решит

может поподробнее расскажете о задаче.

Код: plaintext
1.
2.
3.
A a = new A();
a.X = 10;
B b = a.Clone();
b.X++;

a.X = 10;
b.X = 11;
Clone() надо еще ручками реализовать, да и возвращает он object

разумеется. а в программировании все так. :)
ручками реализовывать то. ) Хотелось бы по меньше такого кода
...
Рейтинг: 0 / 0
Наследование, struct
    #36601164
Gluck_13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
comphead,

в "Framework Design Guidlines" можно прочесть следующие рекомендации:

DO NOT implement ICloneable
DO NOT use ICloneable in public APIs.

см. блог от автора:
http://blogs.msdn.com/brada/archive/2003/04/09/49935.aspx

рекомендуется реализовать собственную логику клонирования, не используя интерфейс ICloneable.
...
Рейтинг: 0 / 0
Наследование, struct
    #36601360
Gatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nafа почему в C# нет наследования структур?

С уважением, Naf(неупакованная) структура не имеет ссылки на тип, поэтому в рантайме нельзя определить какого типа структура. т.к. структуры не наследуются, то компилятор всегда знает какой тип у конкретного экземпляра структуры
...
Рейтинг: 0 / 0
Наследование, struct
    #36601394
comphead
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluck_13comphead,

в "Framework Design Guidlines" можно прочесть следующие рекомендации:

DO NOT implement ICloneable
DO NOT use ICloneable in public APIs.

см. блог от автора:
http://blogs.msdn.com/brada/archive/2003/04/09/49935.aspx

рекомендуется реализовать собственную логику клонирования, не используя интерфейс ICloneable.

да ну? и почему его нерекомендутся использовать?

точнее чем бы ваша логика клонирования отличалась бы?

переопределили метод Clone()
а дальше ваша логика.
так в чем смысл поста тогда?
...
Рейтинг: 0 / 0
Наследование, struct
    #36602025
Gluck_13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
compheadда ну? и почему его нерекомендутся использовать?
Я давал ссылку на блог одного из авторов "Framework Design Guidlines", где описано, почему не рекомендуется и как надо. Кратко - контракт интерфейса ICloneable не определяет способа копирования - глубокое или поверхностное.
compheadточнее чем бы ваша логика клонирования отличалась бы?
Тем, что была бы определенной :)
compheadтак в чем смысл поста тогда?
Удержать топикстартера от сомнительных архитектурных решений.
...
Рейтинг: 0 / 0
Наследование, struct
    #36602226
comphead
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluck_13compheadда ну? и почему его нерекомендутся использовать?
Я давал ссылку на блог одного из авторов "Framework Design Guidlines", где описано, почему не рекомендуется и как надо. Кратко - контракт интерфейса ICloneable не определяет способа копирования - глубокое или поверхностное.
compheadточнее чем бы ваша логика клонирования отличалась бы?
Тем, что была бы определенной :)
compheadтак в чем смысл поста тогда?
Удержать топикстартера от сомнительных архитектурных решений.

у вас есть пустая реализация метода.
хотите в нем реализуйте shallow copy хотите deep. или вы не совсем разобрались.

для именно той задачи, что хочет автор я пока путей кроме клонирования/копирования не вижу.
если вы видите, предложите.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Наследование, struct
    #38770380
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как реализовать общую функциональность для структур, если без наследования?

Скажем, есть метод, который переводит любую структуру в массив байт через вызов метода Serialize этой структуры. Ну и плюс добавляет некоторые данные к этому массиву байт (код добавления этих данных всегда одинаковый и не зависит от типа входящей структуры). Ну и выдаёт массив байт в качестве возврата. Налицо одинаковая функциональность - как обобщить эту функциональность на все структуры, которые я хочу таким образом преобразовывать (т. е. на все структуры, которые могут приходить на вход вышеописанного метода)? Можно сделать перегрузки для каждого типа структур. Но тогда нужно будет копировать весь код в этих методах, и код одинаковым.


И ещё дополнительный вопрос. Почему в дотнете часто втречаются "семейства" методов вида

GetBytes(int x)
GetBytes(long x)
GetBytes(short x)
GetBytes(uint x)
GetBytes(ulong x)
GetBytes(ushort x)

и т. п., вместо одного

GetBytes<T>(T x)

? Не связано ли это с отсутствием наследования структур?
...
Рейтинг: 0 / 0
Наследование, struct
    #38770383
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может, переделать структуру в класс?
...
Рейтинг: 0 / 0
Наследование, struct
    #38770450
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320, раз речь о общем методе Serialize(), то сделай интерфейс с ним, добавь его ко всем структурам и напиши обобщенный метод с ограничением where T : struct, IMySerializable.

user7320Почему в дотнете часто втречаются "семейства" методов вида
Для обеспечения типовой безопасности (type safety) без изменений типов для которых эти методы предназначены. Также возможно что они были созданы в .NET 1.x когда обобщения еще не поддерживались.

user7320Может, переделать структуру в класс?
Структуру следует использовать для небольших значений с семантикой передачи по значению. Только тебе известно что нужно получить. Вот и решай.
...
Рейтинг: 0 / 0
Наследование, struct
    #38770470
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazileuser7320, раз речь о общем методе Serialize(), то сделай интерфейс с ним, добавь его ко всем структурам и напиши обобщенный метод с ограничением where T : struct, IMySerializable.
Под методом Serialize я имел ввиду статический метод - удобно вызывать эти методы (ещё и Deserialize есть) как статические. Тогда интерфейс не подойдёт. И класс не подойдёт - нельзя сделать статические методы абстрактными или виртуальными.

Похоже, надо выносить эту логику в отдельный класс-хелпер. Как вы думаете?
...
Рейтинг: 0 / 0
Наследование, struct
    #38770473
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320И класс не подойдёт - нельзя сделать статические методы абстрактными или виртуальными.
Я имею ввиду, как базовый класс.
...
Рейтинг: 0 / 0
Наследование, struct
    #38770478
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, непонятно, как в параметре метода указать, что тип этого параметра должен поддерживать такие-то СТАТИЧЕСКИЕ методы.
...
Рейтинг: 0 / 0
25 сообщений из 36, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Наследование, struct
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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