Ошибка конструктора 0 аргументов - PullRequest
0 голосов
/ 07 марта 2012

Я делаю спортивный календарь, который имеет места, события и спортсменов.

В основном, когда я пытаюсь запустить программу, я получаю ошибку, что "Sport2012.Venue не содержит конструктор, который принимает 0 аргументов.

//Method to add a new Venue to program
    public void addVenue(Venue v)
    {
        m_Venue.Add(new Venue());
    }

Приведенный выше код ошибки в m_Venue.Add (new Venue ());

    public String m_venueName;
    public String m_venueAddress;
    private List<Event> m_Events;

    public Venue(String venueName, String venueAddress)
    {
        m_venueName = venueName;
        m_venueAddress = venueAddress;
        m_Events = new List<Event>();
    }

Приведенный выше код показывает конструктор для Sport2012.Venue.

В основном я создаю новый конструктор или изменяю первый экстракт

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

Даниэль

Ответы [ 6 ]

5 голосов
/ 07 марта 2012

Я полагаю, ваш метод addVenue неверен

public void addVenue(Venue v)
{
    // add the provided instance, not a NEW one
    m_Venue.Add(v);
}
5 голосов
/ 07 марта 2012

Из вашего кода похоже, что вы пытаетесь добавить v к m_Venue, поэтому вы должны просто сказать

public void addVenue(Venue v) {
    m_Venue.Add(v);
}

Вы хотите добавить экземпляр Venue, который был передан в качестве параметра v, а не новый экземпляр, который создавался бы new Venue(), если бы существовал конструктор без параметров.

1 голос
/ 07 марта 2012

В C # все нестатические классы имеют неявный конструктор по умолчанию, без параметров (без аргументов), если вы явно не создаете конструктор. Определение любого конструктора означает, что более не существует неявного конструктора. В этом случае ваш класс имеет конструктор, который принимает два аргумента, поэтому у вас нет неявного конструктора. Ваш компилятор ловит это. Вам нужно либо a) добавить конструктор без параметров, либо b) изменить экземпляр (new Venue ..) для использования существующего конструктора.

Просто знайте, почему ваш конструктор берет эти аргументы в первую очередь. Может ли объект вашего объекта «работать» без имени или адреса? И есть ли другой способ предоставить имя или адрес (например, используя установщики открытых свойств). Если это так, вы можете думать о них как о факультативном. В этом случае ваш существующий конструктор предназначен для удобства, и вы можете смело добавлять конструктор без параметров. Если вам абсолютно необходимы имя / адрес объекта и нет способа установить их, не нарушая инкапсуляцию, вам следует изменить логику создания экземпляров для предоставления аргументов.

Хорошее практическое правило заключается в том, что создатель объекта предоставляет объекту его основные компоненты / службы / зависимости через конструктор. Необязательные компоненты / услуги / зависимости могут поставляться после строительства.

0 голосов
/ 07 марта 2012

У вас есть две незначительные концептуальные ошибки здесь.

Первая проблема - вы создаете новое место без аргументов -> .Add(new Venue()). Конструктор Venue принимает две строки. Это источник вашей ошибки компиляции. .Add(new Venue("foo", "bar")); будет компилироваться, например.

Вторая проблема заключается в том, что вы передаете Venue методу addVenue, но не добавляете его в список. Вы, вероятно, имели в виду m_Venue.Add(v);, и это, вероятно, то, что вы должны делать.

0 голосов
/ 07 марта 2012
m_Venue.Add(v); would get rid of that error

Все классы в C # имеют конструктор по умолчанию с 0 аргументами, пока вы не определите конструктор. После того, как вы явно определили конструктор, вам также нужно добавить один с 0 аргументами (если это то, что вам нужно)

0 голосов
/ 07 марта 2012

m_Venue.Add (new Venue ("лорды", "лондон"));

, если метод добавления места уже занимает место, тогда просто сделайте m_Venue.Add (v)

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