2014-12-05 11 views
0

У меня возникли проблемы, обертывая мою голову вокруг этого. У меня есть 2 конструктора. Первый имеет 2 аргумента:Как вызвать конструктор с двумя аргументами из конструктора без аргументов?

public Instrument(string name, string category) 
{ 
    this.Name = name; 
    this.Category = category; 
} 

Тогда у меня есть по умолчанию (без аргументов) конструктора с константами для дефолтов:

public Instrument()    
{ 
    this.Name = DefaultName; 
    this.Category = DefaultCategory; 
} 

Я тоже должен вызвать конструктор 2 параметра из конструктора не аргумент , Как мне это сделать? Я также задаюсь вопросом, почему это даже необходимо. Если вы вызываете параметр 2 по умолчанию, как бы вы когда-либо передавали значения по умолчанию в приложение? Поэтому, я думаю, мой главный вопрос: как я могу назвать конструктор параметров 2 из конструктора по умолчанию?

ответ

7

путем вызова конструктора два ARG от установленного по умолчанию, передавая значения по умолчанию, как это:

public Instrument() : this(DefaultName, DefaultCategory) 
{ 

} 
+1

Что касается передачи значений по умолчанию в конструктор по умолчанию: цель обычно заключается в упрощении использования класса путем предоставления значений по умолчанию через константу, встроенную автором класса/библиотеки. Таким образом, клиент, пытающийся использовать настройки по умолчанию, просто вызовет конструктор без аргументов, что наследует предполагаемое преимущество того, что он не должен предоставлять 2 аргумента, за исключением случаев, когда ему или ей необходимо переопределить значения по умолчанию. – condiosluzverde

+0

Итак, в приведенной выше части «this» вызывает конструктор 2 аргументов? Но это только для того, чтобы передать значения по умолчанию? Возможно, я уже думал об этом. Моя голова говорит, что если вы вызываете конструктор аргументов 2, вы получите два аргумента, а не значения по умолчанию. – ScottT

+0

Да, это ключевое слово относится к текущему классу, поэтому 'this (arg1, arg2)' вызывает конструктор, передавая значения по умолчанию. он в основном такой же, как если бы пользователь вызывал конструктор аргументов 2, передавая информацию по умолчанию, просто пользователю не нужно, если они хотят получить информацию по умолчанию – Shadow

2

Это, как вы можете это сделать ...

public class Instrument 
{ 
    public string Name; 
    public string Category; 

    public Instrument() 
     : this("DefaultName", "DefaultCategory") 
    { 

    } 

    public Instrument(string name, string category) 
    { 
     this.Name = name; 
     this.Category = category; 
    } 
} 

Теперь ответ вопрос , почему это даже необходимо. ...

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

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

Смежные вопросы