2015-09-11 3 views
0

Итак, у меня был следующий конструктор.Повторное использование кода при перегрузке конструктора?

public WaitPanelThread(Point origin, 
         int delay, 
     //bool westEast, 
         String direction, 
         Panel panel, 
         Color colour, 
         Semaphore semaphore, 
         Semaphore semaphore2, 
         Semaphore parkSemaphore, 
         Semaphore nextSlot, 
         Buffer buffer, 
         Buffer buffer2, 
         Buffer parkBuffer, 
         String panelParkSpot, 
         String nextSpot) 
    { 
     this.origin = origin; 
     this.delay = delay; 
     this.nextSpot = nextSpot; 
     this.parkBuffer = parkBuffer; 
     this.nextSlot = nextSlot; 
     this.panelParkSpot = panelParkSpot; 
     //this.westEast = westEast; 
     this.direction = direction; 
     this.parkSemaphore = parkSemaphore; 

     this.panel = panel; 
     this.colour = colour; 
     this.plane = origin; 
     if (direction == "down") 
     { 
      this.yDelta = 2; 
      this.xDelta = 0; 
     } 
     if (direction == "left") 
     { 
      this.xDelta = -10; 
      this.yDelta = 0; 
     } 
     if (direction == "right") 
     { 
      this.xDelta = 10; 
      this.yDelta = 0; 
     } 
     this.panel.Paint += new PaintEventHandler(this.panel_Paint); 
     //this.xDelta = westEast ? +10 : -10; 
     //this.yDelta = 0; 
     this.semaphore = semaphore; 
     this.semaphore2 = semaphore2; 
     this.buffer = buffer; 
     this.buffer2 = buffer2; 

    } 

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

public WaitPanelThread(Point origin, 
         int delay, 
     //bool westEast, 
         String direction, 
         Panel panel, 
         Color colour, 
         Semaphore semaphore, 
         Semaphore semaphore2, 
         Semaphore parkSemaphore, 
         Semaphore nextSlot, 
         Buffer buffer, 
         Buffer buffer2, 
         Buffer parkBuffer, 
         String panelParkSpot, 
         String nextSpot, 
         bool isTurn, 
         Semaphore altSem, 
         Buffer altBuf) 
    { 
     this.origin = origin; 
     this.delay = delay; 
     this.nextSpot = nextSpot; 
     this.parkBuffer = parkBuffer; 
     this.nextSlot = nextSlot; 
     this.panelParkSpot = panelParkSpot; 
     //this.westEast = westEast; 
     this.direction = direction; 
     this.parkSemaphore = parkSemaphore; 
     this.isTurn = isTurn; 

     this.panel = panel; 
     this.colour = colour; 
     this.plane = origin; 
     this.altSem = altSem; 
     this.altBuf = altBuf; 
     if (direction == "down") 
     { 
      this.yDelta = 2; 
      this.xDelta = 0; 
     } 
     if (direction == "left") 
     { 
      this.xDelta = -10; 
      this.yDelta = 0; 
     } 
     if (direction == "right") 
     { 
      this.xDelta = 10; 
      this.yDelta = 0; 
     } 
     this.panel.Paint += new PaintEventHandler(this.panel_Paint); 
     //this.xDelta = westEast ? +10 : -10; 
     //this.yDelta = 0; 
     this.semaphore = semaphore; 
     this.semaphore2 = semaphore2; 
     this.buffer = buffer; 
     this.buffer2 = buffer2; 

    } 

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

Я говорю о чем-то вроде использования метода «Супер()» в унаследованном классе (я изучил его, здесь не может быть сделано, потому что они находятся в одном классе).

спасибо.

ответ

0

Синтаксис для этого есть (в конструкторе):

public WaitPanelThread(... parameters...) : this(..parameters for another constructor..) 
{ 
    // initialize the optional parameters here 
} 
+0

Спасибо так много. Я думаю, что это именно то, что мне нужно. Поэтому, когда я использую это, первый конструктор будет запускать присвоение значений, как обычно, и тогда мои новые параметры также будут назначены? Также, как порядок будет при инициализации объекта? Тот же порядок, что и первый конструктор, соответствует указанному новому порядку? Спасибо! – Kando

+0

Правильно, первый вызов будет связан с конструктором, указанным с вызовом 'this (...)', а затем будет выполнена часть '// инициализация необязательных параметров здесь'. 'This (..)' часть конструктора всегда называется первой. Читайте на тему * перегрузки конструктора * если есть больше вопросов. –

+0

Спасибо, ты очень помог. – Kando

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

  • Нет связанных вопросов^_^