Абстрактен клас е такъв, който е предназначен само да бъде основен клас на други класове. "Абстрактен" модификатор се използва, за да се направи резюме на класа. Един абстрактен модификатор показва, че има липсваща реализация, която трябва да бъде реализирана в класа, получен от него. Абстрактен клас може да има абстрактни и не-абстрактни членове. Един абстрактен клас трябва да има поне един абстрактен метод, иначе няма смисъл да се обявява този клас като „абстрактно“.
Пример за абстрактен клас в C #:
абстрактен клас MyCircle {абстрактна публична зона int (); } Клас MyArea: MyCircle {public override int Area () {страна на връщане *; .....}}1 2 3 4 5 6 7 8 9 10 11 | абстрактен клас MyCircle {абстрактна публична зона int (); } Клас MyArea: MyCircle {public override int Area () {страна на връщане *;, , , , , }} |
Както е показано в горния пример, абстрактният метод 'Area' в класа MyCircle е заменен в извлечения клас MyArea.
интерфейс
Интерфейсът съдържа само декларация за членове, включително методи, свойства, събития или индексиращи елементи. Тя не съдържа изпълнението на тези членове. Клас или структура изпълнява интерфейса, трябва да осигури дефиницията на методите, декларирани в интерфейса. Това означава, че интерфейсът осигурява стандартна структура, която трябва да следва следващият клас.
Пример за интерфейс в C #:
използване на System.Collections.Generic; използване на System.Linq; използване на System.Text; пространство от имена MyName {публичен интерфейс MyData {void getdata (); void showdata (); } public class NameData: MyData {публично двойно getdata () {име на низ; Console.WriteLine ("Въведете името:"); име = Console.ReadLine (); } public void showdata () {Console.WriteLine ("Моето име е:", име); }}}1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | използване на System. Колекции. Общи; използване на System. Linq; използване на System. Текст ; пространство от имена MyName {публичен интерфейс MyData {void getdata (); void showdata (); } public class NameData: MyData {публично двойно getdata () {име на низ; Конзола. WriteLine ("Въведете името:"); name = Конзола. ReadLine (); } публични void showdata () {Console. WriteLine ("Моето име е:", име); }}} |
Както е показано в горния пример, интерфейсът MyData има две декларации за метода getdata () и showdata (). Класът NameData, който прилага този интерфейс, трябва да даде дефиницията на методите, декларирани в интерфейса MyData.
Разлика между абстрактния клас и интерфейса
- Абстрактен клас може да има както абстрактни, така и не-абстрактни членове. Но в един интерфейс всички членове са имплицитно абстрактни и трябва да бъдат заменени в извлечения клас.
- Един клас може да наследи няколко интерфейса, но само един абстрактен клас.
- Абстрактен клас може да съдържа методи с или с определение. Но интерфейсът може да съдържа само подпис на метод.
- Абстрактен клас може изцяло, частично или изобщо да не бъде реализиран, но интерфейсът трябва да бъде изцяло изпълнен, т.е. всички членове трябва да бъдат дефинирани в класа извличане.
- Интерфейсът не може да съдържа модификатори за достъп, но абстрактният клас може да го има за функции, свойства или събития.