Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> internal struct 
V
    Опции темы
stab
  Дата 27.3.2006, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



Кто-нибудь может объяснить в чём смысл следующего предупреждения:

Field 'TestStruct.TestField' is never assigned to, and will always have its default value 0.

для такого кода:

Код

    internal struct TestStruct
    {
        public int TestField;
    }


если структуру объявить, как public, то всё ок. структура по использованию именно internal, понятно, что можно просто варнинги отрубить или сделать псевдо полезный конструктор. но в чём смысл подобного поведения компилятора?


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
arilou
Дата 27.3.2006, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Возможно, недоработка в компиляторе smile А может знаешь в чем дело? В том, что присвоение значений internal стр-ре компилятор может отследить, т.к. область ее действия известна - текущая сборка. А для public - неизвестно...

УПС smile Это я наоборот написал... Ты не перепутал?


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
ivashkanet
Дата 27.3.2006, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Это сообщение означает: "Смысл твоей структуры???, она нигде не используется".
А так как структура внутренняя (internal), то она может использоваться только в рамках программы.
Если сделать структуру public, то, возможно, она будет использоваться вне твоего приложения. И компилятор молчит.

P.S. Если добавить где-нибудь строчки:
Код

TestStruct ts;
ts.TestField = 10;

То варнинга не будет. smile

P.P.S. Вот только почему компилятор не обращает внимание на internal class, а только на internal struct smile


PM MAIL WWW ICQ   Вверх
stab
Дата 27.3.2006, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



Цитата(ivashkanet @ 27.3.2006, 23:33 Найти цитируемый пост)
P.S. Если добавить где-нибудь строчки...


слушай, и правда. тупо сделано, имхо. если уж отслеживать подобные вещи, то тогда уж для конкретных переменных и полей. структура-то чем виновата?!
Добавлено @ 20:08
Цитата(ivashkanet @ 27.3.2006, 23:33 Найти цитируемый пост)
P.P.S. Вот только почему компилятор не обращает внимание на internal class, а только на internal struct


наследование?


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
ivashkanet
Дата 27.3.2006, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(cully @ 27.3.2006, 20:07 Найти цитируемый пост)
слушай, и правда. тупо сделано, имхо. если уж отслеживать подобные вещи, то тогда уж для конкретных переменных и полей. структура-то чем виновата?!

Структура -- это большооое поле, включающее в себя другие поля, ИХМО.

Цитата(cully @ 27.3.2006, 20:07 Найти цитируемый пост)
наследование?

Врядли, наследник не видит internal class-ы. (только protected или public)

Скорее всего я не прав smile , но на структуру все же отводится память (даже просто объявленную в программе), а на класс -- нет. smile

PM MAIL WWW ICQ   Вверх
Exception
Дата 28.3.2006, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Не пойму, а что здесь не так? Компилятор видит, что нигде в программе ты не используешь поле TestField и спрашивает, зафига ты его вообще объявил.
Добавлено @ 00:51
Дык он на поле TestField и ругается, а не на всю структуру. Причем тут она полностью?
PM   Вверх
mr.DUDA
Дата 28.3.2006, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(cully @ 27.3.2006, 17:07 Найти цитируемый пост)
если структуру объявить, как public, то всё ок. структура по использованию именно internal, понятно, что можно просто варнинги отрубить или сделать псевдо полезный конструктор. но в чём смысл подобного поведения компилятора?

У меня компилятор (2.0) НЕ ругается, если сделать структуру и поле public. Во всех остальных комбинациях модификаторов - ругается. Причём ошибки разные. Если структура - internal, а поле - public, то "Field 'field' is never assigned to, and will always have its default value 'value'
". В мсдн написано по этому поводу:
Цитата
The compiler detected an uninitialized private or internal field declaration that is never assigned a value.


Если структура - public, а поле - private, то: "The private field 'WindowsApplication2.Test.testField' is never used". мдсн:
Цитата
A private variable was declared but never referenced. A common way to generate this warning is when you declare a private member of a class and do not use it.


Причём не зависит от того, это структура или класс.

З.Ы. почему ничего не пишет, если сделать и поле и структуру (класс) public-ом -- для меня большая загадка... smile


--------------------
user posted image
PM MAIL WWW   Вверх
ivashkanet
Дата 28.3.2006, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(mr.DUDA @ 28.3.2006, 08:22 Найти цитируемый пост)
З.Ы. почему ничего не пишет, если сделать и поле и структуру (класс) public-ом -- для меня большая загадка...

Эту структуру можно использовать познее. Например из другой программы, подключив исходную как библиотеку. smile

PM MAIL WWW ICQ   Вверх
Exception
Дата 28.3.2006, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Если ты объявил его как internal - однозначно он больше нигде не используется. Так как в твоей сборке ты не использовал это поле, значит оно вообще бесполезное, о чем компилятор предупреждает. Если ты объявишь класс/структуру как public, появляется возможность, что кто-то другой использует это поле в своей сборке => возможно, оно о бесполезно. Что непонятно smile ?
PM   Вверх
arilou
Дата 28.3.2006, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Вобщем получается, что мой начальный постулат был верен


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
ivashkanet
Дата 28.3.2006, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(arilou @ 28.3.2006, 11:31 Найти цитируемый пост)
Вобщем получается, что мой начальный постулат был верен

На мой взгляд Да smile

Это сообщение отредактировал(а) ivashkanet - 28.3.2006, 12:08
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 28.3.2006, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Занавес smile


--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0562 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.