Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Инициализация static-членов классов\структур


Автор: Gunslinger 16.3.2010, 09:31
1. При определении дата-членов классов\структур почему им сразу присвоить значения нельзя? 
2. Если есть статик дата-члены, то необходим статик конструктор. Но если эти дата-члены паблик, то обязателен ли конструктор? Ведь можно их инициализировать в коде.
3. Если есть статик дата-члены, то для них конструкторы создаются автоматически или нужно вручную?

Автор: A5uKa 16.3.2010, 15:19
1. потому, что их нет ещё (используй конструктор)
2. статик конструктора не бывает (они не создаются в процессе выполнения и функция "при создании" не нужна)
3. читай 2.

Автор: 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. потому, что их нет ещё (используй конструктор)

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

Автор: A5uKa 16.3.2010, 16:48
Цитата(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. Это для не статик

Автор: Exai1e 16.3.2010, 16:58
Цитата(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);

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

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

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

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

Автор: Exai1e 16.3.2010, 21:33
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 Найти цитируемый пост)
для статик дата-членов.

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

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

наверное имеются ввиду fields

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

Автор: Kanes 17.3.2010, 10:03
Нет, в русской версии поля - это поля smile 

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

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

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

Автор: Exai1e 17.3.2010, 11:18
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();
        }
    }
}


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

Ну надо привыкать к терминологии используемых технологий, у классов есть fields - поля и methods - методы, а никакие-нить дата-члены и функции-члены

Автор: Gunslinger 18.3.2010, 13:03
Exai1e, наглядный пример, спасибо.

Kanes, а что писать, если членом класса является оператор, делегат, свойство или еще что-нибудь подобное? Они тоже к методам относятся?

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

А конкретно написал про поля и методы, свойства - это свойства (хотя на самом деле это методы), делегаты - это делегаты, операторы(ты про перегрузки?) соответственно тоже.

Автор: mes 28.3.2010, 14:26
Цитата(Exai1e @  16.3.2010,  22:14 Найти цитируемый пост)
только для меня это немного странное название (возможно из за того что слышу что бы "их" так обзывали)

дата-член и функция-член - это терминология C++.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)