ПредишенСледващото

претоварването на методите

Книгата е предназначена за широк кръг от читатели с интереси в програмирането в C # .Vvedite кратко резюме тук

Книга: C # 4.0: Подробен наръчник

претоварването на методите

В C #, можете да споделяте всеки със същото име в два или повече метода от същия клас, при условие че техните параметри са обявени по различен начин. В този случай казваме, че методите са претоварени. и процесът се нарича метод претоварване. Претоварването на методите се отнася до един от начините за осъществяване на полиморфизма в C #.

Най-общо, методът за обработка на различните варианти достатъчно, за да декларират, а останалата част ще се грижи за компилатора. Но е необходимо да се спазват следните важното условие: вида или броя на параметрите на всеки метод трябва да бъде различен. Съвсем недостатъчно, за да два метода се различават само по вида на ценности връщане. Те също така имат различни типове или номер на техните параметри. (Във всеки случай, типове връщане предоставят достатъчно информация, за C # компилатора да реши кой метод трябва да се използва.) Разбира се, претоварени методи могат да бъдат различни видове и да се върнат ценности. Когато се свържете с претоварен метод, изпълнена една от неговия вариант, чиито параметри отговарят на (вид и брой) премине аргументи.

Ето един прост пример за изчисляване на претоварването на методите.

Ето какви са резултатите в изпълнението на горния код.

без параметри
Единият вариант: 2
Две параметри: 4 юни
Метод повикване води ob.OvlDemo (4, 6): 10
Две двойно параметър тип: 1,1 2.32
Метод повикване води ob.OvlDemo (1.1, 2.32): 3.42

Както можете да видите, OvlDemo () метод е претоварена четири пъти. Първият вариант не получава параметри, получава втори число параметър, трета по - два параметъра число, а четвъртата - две двойни параметър тип. Също така имайте предвид, че първият метод две възможности OvlDemo () връща стойност нищожно. и по същество не се връщат всяка стойност, а другите две - връщане на специфична стойност. И това е напълно нормално, но, както е обяснено по-горе, типа на връщане не е от значение за начина на претоварване. Следователно, опит да се използват два различни метода (от типа на връщане) изпълнение OvlDemo () в следния код ще доведе до грешка.

И както е обяснено в Глава 3, C # има редица косвени (т.е. автоматично) тип реализации. Тези трансформации са приложими и в настройките на претоварени методи. Като пример, имайте в предвид следното програмата.

Когато стартирате тази програма дава следния изход.

В този пример, само две възможности са определени метод MyMeth (). с параметър от тип Int и двойно параметър. Независимо от това, MyMeth на метод () може да премине на стойността на един байт, дума, или поплавък. Така, ако този метод се предава тип байт стойност, или Накратко, C # компилатора автоматично преобразува тази стойност в INT тип и в крайна сметка причинява изпълнение MyMeth (междинно съединение) на метода. И ако това се предава стойността на число с плаваща запетая. се превръща в двойно тип и като резултат, причинени MyMeth (двойно) вариант на този метод.

Все пак трябва да се има предвид, че много реализации неявните тип се извършват само ако няма точни опции за вид съвпадение и аргументи. Като пример, тук е леко променена версия на предишната програма, която добавя опция метод MyMeth (), където е посочено байт тип параметър.

Изпълнението на тази програма води до следния резултат.

В настоящото изпълнение метод програма MyMeth на (), получаване аргумент на тип байт, така че ако този метод се извиква с аргументи на тип байт избран вариант MyMeth (байт) без автоматично преобразуване на типа Int.

И двата модифициращите параметри, код и отвън, също се вземат предвид при вземането на решение относно начина на претоварване. Като пример, по-долу е фрагмент код, в която са дефинирани два напълно различни методи.

Поради това, при работа

наречен метод MyMeth (междинно съединение х), но лечението

причинени метод MyMeth (виж междинно съединение х).

Въпреки факта, че модификаторите Код и извън параметри се вземат предвид при вземането на решение по метода на претоварване, разликата между тях не е толкова важно. Така например, след две възможности MyMeth () метод, са невалидни.

В този случай, компилаторът не е в състояние да се разграничат две версии на същия метод MyMeth () само въз основа на това един от тях се използва параметър навън. а в другата - параметър лит.

Метод претоварване поддържа полиморфизъм собственост, тъй като по този начин се реализира в C # основният принцип на полиморфизъм в един интерфейс - набор от методи. За да стане ясно, как да направите това, нека се обърнем към конкретни примери. В езиците за програмиране, които не поддържат претоварване на методи, всеки метод трябва да има уникално име. Но програмиране често е необходимо да се приложат по същество един и същ метод за обработка на различни типове данни. Да кажем, че това отнема функция, която определя абсолютната стойност на. В езици, които не поддържат метод натоварване, обикновено трябва да създадете три или повече версии на функция с няколко различни, но с различни имена. Например, в С функция абсолютен на () връща абсолютната стойност на цяло число, лаборатории () функция - абсолютната стойност на дълго число и фабрики () функция - абсолютната стойност на плаваща точка нормален (един) точност.

В претоварване не се поддържа, и така всяка функция трябва да има свое специално име, независимо от факта, че всички по-горе характеристики, по същество правят същото нещо - абсолютната стойност на. Но това е фундаментално усложнява ситуацията, тъй като е необходимо да се помни имената на всички три функции, въпреки че те се прилагат по един и същи основен принцип. Подобни трудности в C # не възникват, тъй като всеки метод, абсолютната стойност може да бъде назначен със същото име. Всъщност, съставът на библиотеката .NET Framework клас включва метод Abs (), който се зарежда в System.Math клас за обработка на данни на различни цифрови видове. C # компилатор определя коя версия на метод Abs на () трябва да се нарича, в зависимост от типа на предаваната аргумент.

претовари основната ценност е, че тя осигурява достъп до методите, свързани с общото име. Следователно, Abs общо наименование означава действие да се извърши, като компилатора избира едно специфично изпълнение на метода съгласно обстоятелства. Благодарение на полиморфизъм на няколко имена са намалени до един. Въпреки простотата тук В разглеждания пример показва, можете да я разширите принцип полиморфизъм, за да разбера как да се претовари помага да се справят с много по-сложни ситуации в програмирането.

Когато метод е претоварен, всеки вариант може да изпълнява всяка желана действие. За да се установи връзката между претоварени методи не съществува единна норма, но и от гледна точка на правилното програмиране стил метод претоварване на предполага подобна връзка. Следователно, за да използвате същото име за несвързани методи не трябва да бъде, въпреки че е възможно. Например, пл име може да бъде избран за методите, които се връщат на площада и корен квадратен от номерата на числа с плаваща запетая. Но това е фундаментално различен операции. Такова използване на претоварването на методите противоречи на първоначалното си предназначение. На практика трябва да претовари само тясно свързани операции.

В C #, дефинирано понятието за подпис. посочва името на метода, както и списък на нейните параметри; Що се отнася до претоварване този термин означава, че един клас не трябва да съществува два метода със същия подпис. Трябва да се подчертае, че подписът не включва типа на връщане, тъй като не се взема под внимание, когато C # компилатора да вземе решение относно начина на претоварване. Подписът не се включва като модификатор Поколения назад.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!