Разлика између класе апстракције и интерфејса у Ц #

Апстрактна класа личи на много интерфејса, али концепт је помало збуњујући за почетнике ООП-а. Концепцијски, апстрактна класа изгледа баш као интерфејс, наравно, без икакве примене, међутим они имају свој правични део разлика. Иако апстрактна класа може бити дјеломично или у потпуности имплементирана, интерфејс мора бити потпуно имплементиран. Па, најистакнутија разлика између ове две је та што апстрактна класа може имати подразумевану имплементацију, док интерфејс представља само дефиницију метода која садржи само чланске декларације. Расправимо у детаље о теоријским аспектима оба.

Шта је апстрактна класа?

Апстрактна класа је посебна врста класе која делује као основа других класа и не може се инстанцирати. Логика имплементације апстрактне класе обезбеђена је изведеним класама. Да би се класа направила апстрактно, користи се "апстрактни" модификатор, што значи да нека недостајућа имплементација мора бити имплементирана у класу изведену из ње. Садржи и апстрактне и не-апстрактне чланове. Апстрактна класа је намијењена пружању основне функционалности која се може даље дијелити и надјачати више изведених класа. Корисно је избећи било какво дуплирање кода. Изгледају попут интерфејса али са додатном функционалношћу.

Шта је интерфејс?

Интерфејс, с друге стране, није класа која садржи само потпис функционалности. То је образац без имплементације. Концепцијски гледано, то је само дефиниција метода која садржи само декларацију чланова. То је празна љуска која не садржи имплементацију својих чланова. То је попут апстрактне основне класе која садржи само апстрактне чланове као што су методе, догађаји, индектори, својства итд. Не може се директно инстанцирати, а било које класе може имплементирати било која класа. Поред тога, класа може имплементирати више интерфејса, међутим, класа може наследити само једну класу.

Сажетак класе у односу на интерфејс: разлика између апстрактне класе и сучеља у Ц

  1. Вишеструко наслеђивање - Класа може користити само једну апстрактну класу, стога вишеструко насљеђивање није подржано. Са друге стране, интерфејс може подржати вишеструко наслеђивање, што значи да класа може наследити било који број наслеђивања.
  2. Дефиниција  од Сажетак класе и сучеља у Ц #- Апстрактна класа је посебна врста класе која може садржавати дефиницију без примене. Логика имплементације пружа се од изведених класа. Може имати апстрактне и не-апстрактне методе. С друге стране, интерфејс је само образац који ништа не може учинити. Технички је то само празна шкољка.
  3. Имплементација - Апстрактна класа може садржавати и дефиницију и њену примену. То је непотпуна класа која се не може инстанцирати. Интерфејс може имати потпис функционалности само без икаквог кода.
  4.  Приступите модификаторима - Апстрактна класа може имати неколико модификатора приступа, као што су суб, функције, својства итд., Док интерфејсу није дозвољено да има модификаторе приступа и све методе морају бити имплицитно дефинисане као јавне.
  5. Хомогеност - Апстрактна класа користи се за имплементације истог типа, понашања и статуса, док се интерфејс користи за имплементације које деле само потписе метода.
  6. Изјава - Апстрактна класа делује као основна класа за све остале класе, тако да може декларирати или користити било коју променљиву, док интерфејсу није дозвољено да декларише ниједну променљиву.
  7. Изјава о конструктору - Иако апстрактна класа може имати декларацију конструктора, сучеље не може имати декларацију конструктора.
  8. Цоре вс. Перипхерал - Апстрактна класа користи се за дефинисање језгре класе и може се користити за објекте истог типа података. Са друге стране, интерфејс се користи за дефинисање периферних способности класе.
  9. Ригид вс. Суппле - Апстрактна класа је флексибилнија у погледу функционалности, бар из перспективе програмера, док је интерфејс крутији.

Сажетак Класа према сучељу: Облик табеле

Сажетак

Интерфејс

Апстрактна класа може имати све модификаторе приступа за декларирање чланова о функцијама, подпописима и својствима. Интерфејсу није дозвољено да има модификаторе приступа за декларирање чланова о функцијама, подсклопима, својствима итд. Сви чланови се претпостављају да су имплицитно јавни.
Класа може највише користити само једну апстрактну класу. Класа може наследити било који број интерфејса.
Вишеструко насљеђивање није подржано у апстрактној класи. Интерфејс може подржати вишеструко наслеђивање.
Технички је то класа која може или не мора садржавати и дефиницију и њену имплементацију. Интерфејс може имати само потпис функционалности, тако да је у основи празна љуска.
Апстрактна класа може садржавати чланове. цонстс, дефинисане методе и одељци метода. Интерфејс може да садржи само методе и цонстс.
Дефинише основни идентитет класе и користи се за описивање објеката истог типа података. Користи се за описивање периферних способности класе.
Чланови апстрактне класе не могу бити статични осим ако нису потпуни чланови. Чланови интерфејса не могу бити статични.
Идеалан је за имплементацију исте врсте и уобичајено понашање. Сучеља је боље користити ако неколико имплементација дијели само потписе метода.
Може имати декларацију конструктора. Не може имати декларацију конструктора.
Апстрактна класа има унапред дефинисана поља и ограничења. Поља се не могу дефинисати у интерфејсима.
Може имати и апстрактне и не-апстрактне методе. Може имати само апстрактне методе.

Резиме

Која је разлика између апстрактне класе и интерфејса? Ово је вероватно једно од најчешћих питања које се постављају у било ком техничком разговору. Вероватно ћете наћи мноштво информација о апстрактним класама и сучељима у било којем Ц # уџбенику, међутим, разумевање разлике између њих две је прилично тежак део. Можете објединити све информације које можете пронаћи и још увек их не можете добити довољно. Па, концептуално су оба најважнија термина у програмирању и сасвим су иста, међутим, знатно се разликују у погледу функционалности. Док је апстрактна класа посебна врста класе која дјелује као основа за остале класе, интерфејс је, с друге стране, само празна љуска са само чланским декларацијама.