| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > internal struct |
| Автор: stab 27.3.2006, 18:07 | ||
| Кто-нибудь может объяснить в чём смысл следующего предупреждения: Field 'TestStruct.TestField' is never assigned to, and will always have its default value 0. для такого кода:
если структуру объявить, как public, то всё ок. структура по использованию именно internal, понятно, что можно просто варнинги отрубить или сделать псевдо полезный конструктор. но в чём смысл подобного поведения компилятора? |
| Автор: arilou 27.3.2006, 19:32 |
| Возможно, недоработка в компиляторе УПС |
| Автор: ivashkanet 27.3.2006, 19:33 | ||
| Это сообщение означает: "Смысл твоей структуры???, она нигде не используется". А так как структура внутренняя (internal), то она может использоваться только в рамках программы. Если сделать структуру public, то, возможно, она будет использоваться вне твоего приложения. И компилятор молчит. P.S. Если добавить где-нибудь строчки:
То варнинга не будет. P.P.S. Вот только почему компилятор не обращает внимание на internal class, а только на internal struct |
| Автор: ivashkanet 27.3.2006, 20:53 | ||
Структура -- это большооое поле, включающее в себя другие поля, ИХМО. Врядли, наследник не видит internal class-ы. (только protected или public) Скорее всего я не прав |
| Автор: Exception 28.3.2006, 00:49 |
| Не пойму, а что здесь не так? Компилятор видит, что нигде в программе ты не используешь поле TestField и спрашивает, зафига ты его вообще объявил. Добавлено @ 00:51 Дык он на поле TestField и ругается, а не на всю структуру. Причем тут она полностью? |
| Автор: mr.DUDA 28.3.2006, 08:22 | ||||||
У меня компилятор (2.0) НЕ ругается, если сделать структуру и поле public. Во всех остальных комбинациях модификаторов - ругается. Причём ошибки разные. Если структура - internal, а поле - public, то "Field 'field' is never assigned to, and will always have its default value 'value' ". В мсдн написано по этому поводу:
Если структура - public, а поле - private, то: "The private field 'WindowsApplication2.Test.testField' is never used". мдсн:
Причём не зависит от того, это структура или класс. З.Ы. почему ничего не пишет, если сделать и поле и структуру (класс) public-ом -- для меня большая загадка... |
| Автор: ivashkanet 28.3.2006, 11:13 | ||
Эту структуру можно использовать познее. Например из другой программы, подключив исходную как библиотеку. |
| Автор: Exception 28.3.2006, 11:26 |
| Если ты объявил его как internal - однозначно он больше нигде не используется. Так как в твоей сборке ты не использовал это поле, значит оно вообще бесполезное, о чем компилятор предупреждает. Если ты объявишь класс/структуру как public, появляется возможность, что кто-то другой использует это поле в своей сборке => возможно, оно о бесполезно. Что непонятно |
| Автор: arilou 28.3.2006, 11:31 |
| Вобщем получается, что мой начальный постулат был верен |
| Автор: ivashkanet 28.3.2006, 12:07 |
| На мой взгляд Да |
| Автор: mr.DUDA 28.3.2006, 12:45 |
| Занавес |