|
Наследование, struct
|
|||
---|---|---|---|
#18+
а почему в C# нет наследования структур? С уважением, Naf ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2010, 12:14 |
|
Наследование, struct
|
|||
---|---|---|---|
#18+
Naf, Потому что это не ссылочный тип у которого есть свои преимущества и свои недостатки. Из разряда вопросов почему нет наследования int? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2010, 12:19 |
|
Наследование, struct
|
|||
---|---|---|---|
#18+
ITmonstrikNaf, Потому что это не ссылочный тип у которого есть свои преимущества и свои недостатки. Из разряда вопросов почему нет наследования int?Ага, но все же ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2010, 12:27 |
|
Наследование, struct
|
|||
---|---|---|---|
#18+
Было бы удобно в плане: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2010, 12:34 |
|
Наследование, struct
|
|||
---|---|---|---|
#18+
NafБыло бы удобно в плане: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
чем для вас класс хуже? то что он ссылочный и располагается в куче? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2010, 12:43 |
|
Наследование, struct
|
|||
---|---|---|---|
#18+
comphead чем для вас класс хуже? то что он ссылочный и располагается в куче? в классе будет: Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2010, 12:57 |
|
Наследование, struct
|
|||
---|---|---|---|
#18+
а так приходится писать имплицит/эксплицит операторы ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2010, 12:59 |
|
Наследование, struct
|
|||
---|---|---|---|
#18+
Nafа так приходится писать имплицит/эксплицит операторы реализуйте интерфейс IClonealbe ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2010, 13:13 |
|
Наследование, struct
|
|||
---|---|---|---|
#18+
compheadреализуйте интерфейс IClonealbe Это ничего не решит ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2010, 13:15 |
|
Наследование, struct
|
|||
---|---|---|---|
#18+
compheadNafа так приходится писать имплицит/эксплицит операторы реализуйте интерфейс IClonealbe надо кучу кода писать ручками, да и возвращает он object ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2010, 13:17 |
|
Наследование, struct
|
|||
---|---|---|---|
#18+
Nafcompheadреализуйте интерфейс IClonealbe Это ничего не решит может поподробнее расскажете о задаче. Код: plaintext 1. 2. 3.
a.X = 10; b.X = 11; ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2010, 13:18 |
|
Наследование, struct
|
|||
---|---|---|---|
#18+
compheadNafcompheadреализуйте интерфейс IClonealbe Это ничего не решит может поподробнее расскажете о задаче. Код: plaintext 1. 2. 3.
a.X = 10; b.X = 11; Clone() надо еще ручками реализовать, да и возвращает он object ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2010, 13:20 |
|
Наследование, struct
|
|||
---|---|---|---|
#18+
NafcompheadNafcompheadреализуйте интерфейс IClonealbe Это ничего не решит может поподробнее расскажете о задаче. Код: plaintext 1. 2. 3.
a.X = 10; b.X = 11; Clone() надо еще ручками реализовать, да и возвращает он object разумеется. а в программировании все так. :) ручками реализовывать то. ) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2010, 13:23 |
|
Наследование, struct
|
|||
---|---|---|---|
#18+
compheadNafcompheadNafcompheadреализуйте интерфейс IClonealbe Это ничего не решит может поподробнее расскажете о задаче. Код: plaintext 1. 2. 3.
a.X = 10; b.X = 11; Clone() надо еще ручками реализовать, да и возвращает он object разумеется. а в программировании все так. :) ручками реализовывать то. ) Хотелось бы по меньше такого кода ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2010, 13:25 |
|
Наследование, struct
|
|||
---|---|---|---|
#18+
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. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2010, 16:54 |
|
Наследование, struct
|
|||
---|---|---|---|
#18+
Nafа почему в C# нет наследования структур? С уважением, Naf(неупакованная) структура не имеет ссылки на тип, поэтому в рантайме нельзя определить какого типа структура. т.к. структуры не наследуются, то компилятор всегда знает какой тип у конкретного экземпляра структуры ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2010, 17:53 |
|
Наследование, struct
|
|||
---|---|---|---|
#18+
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() а дальше ваша логика. так в чем смысл поста тогда? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2010, 18:04 |
|
Наследование, struct
|
|||
---|---|---|---|
#18+
compheadда ну? и почему его нерекомендутся использовать? Я давал ссылку на блог одного из авторов "Framework Design Guidlines", где описано, почему не рекомендуется и как надо. Кратко - контракт интерфейса ICloneable не определяет способа копирования - глубокое или поверхностное. compheadточнее чем бы ваша логика клонирования отличалась бы? Тем, что была бы определенной :) compheadтак в чем смысл поста тогда? Удержать топикстартера от сомнительных архитектурных решений. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2010, 07:44 |
|
Наследование, struct
|
|||
---|---|---|---|
#18+
Gluck_13compheadда ну? и почему его нерекомендутся использовать? Я давал ссылку на блог одного из авторов "Framework Design Guidlines", где описано, почему не рекомендуется и как надо. Кратко - контракт интерфейса ICloneable не определяет способа копирования - глубокое или поверхностное. compheadточнее чем бы ваша логика клонирования отличалась бы? Тем, что была бы определенной :) compheadтак в чем смысл поста тогда? Удержать топикстартера от сомнительных архитектурных решений. у вас есть пустая реализация метода. хотите в нем реализуйте shallow copy хотите deep. или вы не совсем разобрались. для именно той задачи, что хочет автор я пока путей кроме клонирования/копирования не вижу. если вы видите, предложите. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2010, 10:15 |
|
Наследование, struct
|
|||
---|---|---|---|
#18+
А как реализовать общую функциональность для структур, если без наследования? Скажем, есть метод, который переводит любую структуру в массив байт через вызов метода Serialize этой структуры. Ну и плюс добавляет некоторые данные к этому массиву байт (код добавления этих данных всегда одинаковый и не зависит от типа входящей структуры). Ну и выдаёт массив байт в качестве возврата. Налицо одинаковая функциональность - как обобщить эту функциональность на все структуры, которые я хочу таким образом преобразовывать (т. е. на все структуры, которые могут приходить на вход вышеописанного метода)? Можно сделать перегрузки для каждого типа структур. Но тогда нужно будет копировать весь код в этих методах, и код одинаковым. И ещё дополнительный вопрос. Почему в дотнете часто втречаются "семейства" методов вида GetBytes(int x) GetBytes(long x) GetBytes(short x) GetBytes(uint x) GetBytes(ulong x) GetBytes(ushort x) и т. п., вместо одного GetBytes<T>(T x) ? Не связано ли это с отсутствием наследования структур? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2014, 13:38 |
|
Наследование, struct
|
|||
---|---|---|---|
#18+
Может, переделать структуру в класс? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2014, 13:39 |
|
Наследование, struct
|
|||
---|---|---|---|
#18+
user7320, раз речь о общем методе Serialize(), то сделай интерфейс с ним, добавь его ко всем структурам и напиши обобщенный метод с ограничением where T : struct, IMySerializable. user7320Почему в дотнете часто втречаются "семейства" методов вида Для обеспечения типовой безопасности (type safety) без изменений типов для которых эти методы предназначены. Также возможно что они были созданы в .NET 1.x когда обобщения еще не поддерживались. user7320Может, переделать структуру в класс? Структуру следует использовать для небольших значений с семантикой передачи по значению. Только тебе известно что нужно получить. Вот и решай. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2014, 14:22 |
|
Наследование, struct
|
|||
---|---|---|---|
#18+
bazileuser7320, раз речь о общем методе Serialize(), то сделай интерфейс с ним, добавь его ко всем структурам и напиши обобщенный метод с ограничением where T : struct, IMySerializable. Под методом Serialize я имел ввиду статический метод - удобно вызывать эти методы (ещё и Deserialize есть) как статические. Тогда интерфейс не подойдёт. И класс не подойдёт - нельзя сделать статические методы абстрактными или виртуальными. Похоже, надо выносить эту логику в отдельный класс-хелпер. Как вы думаете? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2014, 14:40 |
|
Наследование, struct
|
|||
---|---|---|---|
#18+
user7320И класс не подойдёт - нельзя сделать статические методы абстрактными или виртуальными. Я имею ввиду, как базовый класс. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2014, 14:40 |
|
Наследование, struct
|
|||
---|---|---|---|
#18+
Вообще, непонятно, как в параметре метода указать, что тип этого параметра должен поддерживать такие-то СТАТИЧЕСКИЕ методы. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2014, 14:43 |
|
Наследование, struct
|
|||
---|---|---|---|
#18+
Все эти type constraints и прочие наследования, абстрактнось и виртуальность влияют только на методы экземпляра, но не на методы типа. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2014, 14:45 |
|
Наследование, struct
|
|||
---|---|---|---|
#18+
Похоже, что только либо через рефлексию, либо так . ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2014, 14:56 |
|
Наследование, struct
|
|||
---|---|---|---|
#18+
Можно сделать интерфейс пустым чтобы он выполнял роль маркера и оформить код примерно так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Код: c# 1. 2. 3. 4.
user7320Вообще, непонятно, как в параметре метода указать, что тип этого параметра должен поддерживать такие-то СТАТИЧЕСКИЕ методы. Никак. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2014, 15:03 |
|
Наследование, struct
|
|||
---|---|---|---|
#18+
bazileМожно сделать интерфейс пустым чтобы он выполнял роль маркера и оформить код примерно так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Код: c# 1. 2. 3. 4.
Нет, что-то не то у вас. У меня УЖЕ ЕСТЬ методы сериализации и десериализации для всех моих структур. И эти методы выполняются по-разному для каждой такой структуры. Они только имеют одинаковую сигнатуру. Теперь мне надо сделать одинаковые дествия, включая вызов метода Serialize, например, в другом методе другого класса. Т. е. примерно так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
И я хочу, чтобы весь одинаковый (кроме вызовов Serialize) код был не разбросан по куче перегрузок метода SendData, а как-то обобщён в одном методе. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2014, 15:10 |
|
Наследование, struct
|
|||
---|---|---|---|
#18+
Поправка, везде StructN.Serialize(); заменить на StructN.Serialize(obj); ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2014, 15:11 |
|
Наследование, struct
|
|||
---|---|---|---|
#18+
Вот так Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2014, 15:12 |
|
Наследование, struct
|
|||
---|---|---|---|
#18+
Кажется, я туплю ))) Вот же! private byte[] SendData(byte[] structAsBytes) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2014, 15:13 |
|
Наследование, struct
|
|||
---|---|---|---|
#18+
Но штука в том, что хотелось бы именно ограничить, чтобы на вход SendData приходили данные только от определённого списка структур. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2014, 15:15 |
|
Наследование, struct
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Код: c# 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2014, 12:32 |
|
Наследование, struct
|
|||
---|---|---|---|
#18+
ЕвгенийВ Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Код: c# 1. 2. 3. 4. 5. 6.
Ну, что через рефлексию можно - это-то понятно. Хотелось бы без неё, средствами чисто языка, без "хаков". Всё равно спасибо за конкретный пример. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2014, 13:09 |
|
Наследование, struct
|
|||
---|---|---|---|
#18+
user7320, вот еще конкретный пример: Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2014, 19:10 |
|
|
start [/forum/topic.php?all=1&fid=20&tid=1402385]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
70ms |
get tp. blocked users: |
2ms |
others: | 365ms |
total: | 515ms |
0 / 0 |