Конструктор C # - PullRequest
       17

Конструктор C #

1 голос
/ 20 апреля 2009

Я недавно видел конструктор C #, который выглядит примерно так ...

public Class foo
{
    public foo() : this(new bar())
    {}
}

Кто-нибудь может мне помочь интерпретировать это? где находится бар ()?
Если бы вы могли помочь мне завершить урок, вставив bar () в нужное место, чтобы я мог скомпилировать / отладить и увидеть всю картинку.

Заранее спасибо.

Никос

Ответы [ 3 ]

7 голосов
/ 20 апреля 2009

Класс foo должен содержать другой конструктор, который принимает в качестве параметра объект bar.

public class foo
{
    public foo()
        : this(new bar())
    { }
    public foo(bar b)
    {
    }
}
public class bar
{
}
1 голос
/ 20 апреля 2009

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

Я видел это в вещах, которые используют аргументы по умолчанию, такие как:

class Rational {
    private:
        long numerator;
        long denominator;
    public:
        void Rational (long n, long d) {
            numerator = n;
            denominator = d;
        }
        void Rational (long n): Rational (n,1) {}
        void Rational (void): Rational (0,1) {}
        void Rational (String s): Rational (atoi(s),1) {}
}

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

Так, если, например, вы добавляете проверку, чтобы убедиться, что знаменатель больше нуля или числитель и знаменатель уменьшены с использованием метода наибольших общих делителей, то только должно произойти в одной точке твой код.

1 голос
/ 20 апреля 2009

В классе foo будет второй конструктор с такой подписью

public foo(bar Bar)
{
     ... do something with bar here;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...