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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Инициализация static-членов классов\структур, обязательна и как осуществляется? 
V
    Опции темы
Gunslinger
Дата 16.3.2010, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: нет
Всего: 3



1. При определении дата-членов классов\структур почему им сразу присвоить значения нельзя? 
2. Если есть статик дата-члены, то необходим статик конструктор. Но если эти дата-члены паблик, то обязателен ли конструктор? Ведь можно их инициализировать в коде.
3. Если есть статик дата-члены, то для них конструкторы создаются автоматически или нужно вручную?
PM MAIL   Вверх
A5uKa
Дата 16.3.2010, 15:19 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: 3
Всего: 16



1. потому, что их нет ещё (используй конструктор)
2. статик конструктора не бывает (они не создаются в процессе выполнения и функция "при создании" не нужна)
3. читай 2.
PM   Вверх
Gunslinger
Дата 16.3.2010, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: нет
Всего: 3



Цитата(A5uKa @  16.3.2010,  15:19 Найти цитируемый пост)
статик конструктора не бывает

вот что нашел:
http://msdn.microsoft.com/ru-ru/library/k9x6w0hc.aspx
Код

Статический конструктор используется для инициализации любых статических данных или для выполнения определенного действия, которое требуется выполнить только один раз. Он вызывается автоматически перед созданием первого экземпляра или ссылкой на какие-либо статические члены.


Цитата(A5uKa @  16.3.2010,  15:19 Найти цитируемый пост)
1. потому, что их нет ещё (используй конструктор)

Это для всех или только для статик? 

PM MAIL   Вверх
A5uKa
Дата 16.3.2010, 16:48 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: 3
Всего: 16



Цитата(Gunslinger @ 16.3.2010,  16:26)
Цитата(A5uKa @  16.3.2010,  15:19 Найти цитируемый пост)
статик конструктора не бывает

вот что нашел:
http://msdn.microsoft.com/ru-ru/library/k9x6w0hc.aspx

Цитата(A5uKa @  16.3.2010,  15:19 Найти цитируемый пост)
1. потому, что их нет ещё (используй конструктор)

Это для всех или только для статик?

1. А это нифига не статический конструктор. Это конструктор, для статической переменной в классе, а класс то не статический. Почему он называется статическим спроси не меня.
2. Это для не статик
PM   Вверх
Exai1e
Дата 16.3.2010, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 908
Регистрация: 3.12.2006
Где: Moscow

Репутация: 4
Всего: 30



Цитата(Gunslinger @  16.3.2010,  09:31 Найти цитируемый пост)
1. При определении дата-членов классов\структур почему им сразу присвоить значения нельзя? 

почему ? или я не так понял вопрос, или 
Код

    class SomeClass
    {
        public static string someString = "Hello";
        public static int someInt = 2;
        //somecode
    }

            Console.WriteLine(SomeClass.someString);
            Console.WriteLine(SomeClass.someInt + SomeClass.someInt);



--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
Gunslinger
Дата 16.3.2010, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: нет
Всего: 3



Цитата(Exai1e @  16.3.2010,  16:58 Найти цитируемый пост)
public static string someString = "Hello";

читаю msdn, есть подобные примеры. Выходит, что можно.

Цитата(A5uKa @  16.3.2010,  16:48 Найти цитируемый пост)
А это нифига не статический конструктор

Под статик конструктором я это и имел ввиду: для статик дата-членов. А что, тут есть какие-нибудь нюансы?

PM MAIL   Вверх
Exai1e
Дата 16.3.2010, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 908
Регистрация: 3.12.2006
Где: Moscow

Репутация: 4
Всего: 30



Gunslinger, статик конструкторы есть (вроде бы аналог Java static конструктора), только параметры они принимать не могут, а статические члены, инициализируют нормально
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication2
{
    class SomeClass
    {
        public static string someString;
        public static int someInt;

        static SomeClass()
        {
            someString = "Hello i am string";
            someInt = 5;
        }
    }
}

            Console.WriteLine(SomeClass.someString);
            Console.WriteLine(SomeClass.someInt + SomeClass.someInt);

            Console.ReadLine();

И вполне норм работает

Цитата(Gunslinger @  16.3.2010,  17:59 Найти цитируемый пост)
для статик дата-членов.

первый раз вижу такое выражение "дата-членов", это как ? можно пример


--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
Kanes
Дата 16.3.2010, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Exai1e @  16.3.2010,  21:33 Найти цитируемый пост)
первый раз вижу такое выражение "дата-членов", это как ? можно пример

наверное имеются ввиду fields
--------------------
Big gun - big future  
PM MAIL   Вверх
Exai1e
Дата 16.3.2010, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 908
Регистрация: 3.12.2006
Где: Moscow

Репутация: 4
Всего: 30



понятн, списибо, я примерно так и предполагал. только для меня это немного странное название (возможно из за того что слышу что бы "их" так обзывали (в таком случаи, чем то чувствую что ТС пользуется ru версией студии))



--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
Kanes
Дата 17.3.2010, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Нет, в русской версии поля - это поля smile 
--------------------
Big gun - big future  
PM MAIL   Вверх
Gunslinger
Дата 17.3.2010, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: нет
Всего: 3



Цитата(Exai1e @  16.3.2010,  23:14 Найти цитируемый пост)
ТС пользуется ru версией студии

 Студия не русифицированная -- термин "поле" непривычен.
Вопрос не в тему: по умолчанию модификатор доступа у всех составляющих класса private? Или только у "полей"? Если private, то как можно вызвать конструктор  
Цитата(Exai1e @  16.3.2010,  21:33 Найти цитируемый пост)
static SomeClass()

? Только если из другого метода того же класса.

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 908
Регистрация: 3.12.2006
Где: Moscow

Репутация: 4
Всего: 30



Gunslinger, у полей по умолчанию private, у классов - видимости на уровне namespace
вот 1 класс
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication2
{
    class SomeClass
    {
        public static string someString;
        public static int someInt;
        string hello = "hello world"; // <- по умолчанию private

        static SomeClass() // не может иметь не параметров, не индификаторов доступа
        {
            someString = "Hello i am string";
            someInt = 5;
        }
    }
}


класс в том же проекте
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            SomeClass sc = new SomeClass();
            sc.hello... // <- так нельзя

            Console.WriteLine(SomeClass.someString); // так можно
            Console.WriteLine(SomeClass.someInt + SomeClass.someInt); // и так тоже

            Console.ReadLine();
        }
    }
}



Это сообщение отредактировал(а) Exai1e - 17.3.2010, 11:19


--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
Kanes
Дата 17.3.2010, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Gunslinger @  17.3.2010,  11:11 Найти цитируемый пост)
Студия не русифицированная -- термин "поле" непривычен.

Ну надо привыкать к терминологии используемых технологий, у классов есть fields - поля и methods - методы, а никакие-нить дата-члены и функции-члены
--------------------
Big gun - big future  
PM MAIL   Вверх
Gunslinger
Дата 18.3.2010, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: нет
Всего: 3



Exai1e, наглядный пример, спасибо.

Kanes, а что писать, если членом класса является оператор, делегат, свойство или еще что-нибудь подобное? Они тоже к методам относятся?
PM MAIL   Вверх
Kanes
Дата 18.3.2010, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Gunslinger @ 18.3.2010,  13:03)
Kanes, а что писать, если членом класса является оператор, делегат, свойство или еще что-нибудь подобное? Они тоже к методам относятся?

А конкретно написал про поля и методы, свойства - это свойства (хотя на самом деле это методы), делегаты - это делегаты, операторы(ты про перегрузки?) соответственно тоже.
--------------------
Big gun - big future  
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

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


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

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


 




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


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

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