Помогите мне понять этот код в C # - PullRequest
0 голосов
/ 23 сентября 2011

я не могу прочитать эту строку кода

public Wine (decimal price, int year) : this (price) { Year = year; }

что ключевое слово :this делает в конструкторе

public class Wine
{
    public decimal Price;
    public int Year;

    public Wine (decimal price) 
    { 
        Price = price; 
    }

    public Wine (decimal price, int year) : this (price) 
    { 
        Year = year; 
    }
}

Ответы [ 4 ]

5 голосов
/ 23 сентября 2011

Это называется цепочкой конструктора.Вместо того, чтобы переписывать код конструктора с одним аргументом, вы просто вызываете его.C # упрощает использование этой короткой записи с двоеточием.

3 голосов
/ 23 сентября 2011

this(price) вызывает другой конструктор, который в этом случае принимает только один параметр типа decimal.В качестве ссылки прочитайте «Использование конструкторов» .

Я не большой поклонник этого конкретного примера, так как оба конструктора выполняют инициализацию.лучше передать значения по умолчанию одному конструктору, который затем выполняет all - таким образом, инициализация не распространяется между различными конструкторами, и у вас есть единственное место, где все инициализируется - лучший способ будет:

public class Wine
{
   public decimal Price;
   public int Year;
   public Wine (decimal price): this(price, 0)
   public Wine (decimal price, int year) 
   { 
      Price = price;
      Year = year; 
   }
}
0 голосов
/ 23 сентября 2011

Он вызывает другой конструктор в том же классе, который имеет эту сигнатуру, передавая в него значения, которые были переданы при первоначальном вызове конструктора.В вашем примере класс Wine имеет (как минимум) два конструктора, один из которых принимает decimal (цена) и int (год), а второй - только decimal (цена).

Когда вы вызываете тот, который принимает два параметра, он вызывает тот, который принимает только один параметр, передавая значение цены во второй.Затем он выполняет тело конструктора (устанавливая год в год).

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

0 голосов
/ 23 сентября 2011

Сначала вызывается конструктор с ценой единственного десятичного параметра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...