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


Автор: takedo 14.9.2009, 16:24
Добрый день, ночь, вечер.

Не могу понять, можно ли проинициализировать структуру? Хочу объявить примерно такую структуру:

Код

struct stPrimer
{
double A;
double B;
}
//////объявляем переменную ArSt
stPrimer[] ArSt= new stPrimer[13]


А вот ArSt хотел бы проинициализировать начальными значениями, как сделать - пока ума не приложу

Автор: mrbrooks 14.9.2009, 16:32
типа этого
Код

struct stPrimer
{
double A;
double B;
  public stPrimer(double a, double b)
  {
    A = a;
    B = b;
  }
}
//////объявляем переменную ArSt
stPrimer[] ArSt= new stPrimer[13] {new stPrimer(12.5,12.5)/*0-й*/, ... ,new stPrimer(12.5,12.5)/*12-й*/};

Автор: mr.Anderson 15.9.2009, 23:25
mrbrooks все верно описал. Если в теории это расписывать, то структура по своей сути похожа на обычный класс. Для инициализации класса мы используем что? Правильно, конструктор. То же самое и в структуре. Разница в том, что в структуре при определении пользовательского конструктора также сохраняется и конструктор по умолчанию, определенный неявно в любой структуре (в отличие от класса, где при определении пользовательских конструкторов конструктор по умолчанию автоматически удаляется). Поэтому мысль проста: определяем в структуре публичный конструктор и используем его для инициализации членов структуры. Пример сказанного написан у mrbrooks'а.

Добавлено через 2 минуты и 16 секунд
Только одно уточнение к примеру выше. В приведенном примере поля A и B окажутся приватными по умолчанию, так что структура теряет свой смысл. Приведу свой практически аналогичный примерчик (на всякий случай):
Код

public struct Point
{
    public int X;
    public int Y;
    public Point(int x, int y)
    {
        X = x;
        Y = y;
    }
}

// пример использования
Point point = new Point(2, 3);
Console.WriteLine("({0}; {1})", point.X, point.Y);

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