Я читаю Структуры данных и алгоритмы с использованием C # (Майкл Макмиллан).

В главе 3 стр. 43 я нашел фрагмент кода, который принимает параметр в конструкторе, но создает объект без передачи чего-либо.

enter image description here

Это возможно?

2
M. Qasim 8 Сен 2016 в 09:52

4 ответа

У вас должен быть конструктор без параметров, и есть способ:

  • 1: необязательный параметр
  • 2: Множественное изменение

1: Необязательный параметр:

public class CArray {
     private int[] arr;
     private int upper;
     private int numElements;

     //Constructor with default value parameter
     public CArray(int size = 0)
     {
         //Your logic must be here
     }
}

2: Множественное переопределение

public class CArray {
     private int[] arr;
     private int upper;
     private int numElements;

     //Constructor with zero parameter
     public CArray()
     {
         this = new CArray(0);
     }
     public CArray(int size)
     {
         //Your logic must be here
     }
}

Итак, в конце и после определения вашего класса вы можете использовать два типа:

var MyArray1 = new CArray();
var MyArray2 = new CArray(10);
1
Imran Shamszadeh 8 Сен 2016 в 07:16

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

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

Таким образом, в вашем примере, на основе предоставленного вами определения класса, невозможно создать новый экземпляр следующим образом: new CArray()

1
Mauro Sampietro 8 Сен 2016 в 07:01

Во-первых, да, это возможно, но в этом контексте я так не думаю. Вы можете создать несколько конструкторов, которые позволят такую ​​ситуацию, например:

public CArray() {
   this(5); 
}
public CArray(int size){
   arr = new int[size]; 
   //other logic's must be here
}

Чтобы описать: первый конструктор более или менее является «конструктором по умолчанию», который войдет в другой конструктор с размером параметра. Вы также можете добавить еще несколько конструкторов.

2
Imran Shamszadeh 8 Сен 2016 в 07:14

Для компиляции кода CArray должен иметь конструктор без параметров; наиболее вероятный синтаксис

   public CArray()
     : this(0) {
   }  

Т.е. если size не указан, пусть он будет равен 0

2
Dmitry Bychenko 8 Сен 2016 в 07:01