В чем разница между наследованиями и инструментами в С#

У меня есть следующий код:

public class HitController : MonoBehaviour, ICentroidHitListener

То, как я это понимаю. HitController наследует от MonoBehaviour и реализует методы в ICentroidHitListener.

Но как это сделать, если я просто хочу, чтобы он реализовал только методы в ICentroidListener? Я его код следующим образом:

public class HitController : ICentroidHitListener

В этом случае, похоже, что HitController наследует от ICentroidHitListener

Ответы

Ответ 1

Если это интерфейс, : реализует интерфейс. Если класс, : наследуется от класса.

Поэтому HitController : ICentroidHitListener является правильным.

Ответ 2

Как правило, невозможно отличить интерфейс от класса с помощью синтаксиса :.

Вот почему важно добавить префикс I для всех ваших интерфейсов.

Указанный вами код public class HitController : ICentroidHitListener верен, и читатели вашего кода должны иметь возможность легко и быстро вывести, что это интерфейс на основе префикса I.

Взято из здесь:

Когда класс или структура реализует интерфейс, класс или структура обеспечивает реализацию для всех членов, определенных интерфейс. Сам интерфейс не обеспечивает функциональность, которую класс или struct могут наследовать то, как функциональность базового класса может быть по наследству. Однако, если базовый класс реализует интерфейс, производный класс наследует эту реализацию. Говорят, что производный класс для реализации интерфейса неявно.

Взято из здесь:

Наследование позволяет создавать новые классы, которые повторно используют, расширяют и изменить поведение, которое определено в других классах. Класс, чей наследуемые члены называются базовым классом, а класс, который наследует эти члены, называется производным классом. Производный класс может иметь только один прямой базовый класс. Однако наследование транзитивно. Если ClassC является производным от ClassB, а ClassB из ClassA, ClassC наследует членов, объявленных в ClassB и ClassA.

В С#, в отличие от таких языков, как С++, множественное наследование не допускается, что означает, что класс не может наследовать более чем один другой класс. И наоборот, класс может реализовывать более одного интерфейса.

Ответ 3

"наследование" подразумевает расширение существующего поведения. Интерфейс не имеет поведения, вы должны реализовать все поведение методов/свойств, определенных в интерфейсе. Следовательно, вы "реализуете" интерфейс и на самом деле ничего не наследуете от него.

Если вы наследуете что-то еще, вы наследуете все его конкретное поведение. Если какой-либо другой класс реализует интерфейс, вам не нужно также реализовывать этот интерфейс. Теперь класс, который "реализует" этот интерфейс, может сделать одну или несколько из этих реализаций интерфейса "абстрактными"; в этом случае вы должны были бы реализовать абстрактных членов класса, из которого вы выходите. Но вам не нужно реализовывать этот интерфейс - вы наследуете интерфейс от базы. Вы можете включить интерфейс в "список базового класса" для производного типа, но это необязательно.

В этом токене вы также "реализуете" полностью абстрактный класс. Но редко бывает, что кто-то будет использовать эту терминологию. По большей части "интерфейс" представляет собой синтаксический сахар в .NET; но у него есть поддержка уровня IL. например полностью абстрактный базовый класс семантически идентичен интерфейсу.

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

Ответ 4

Ответ на то, что вы просите, - "да", если я правильно понимаю.

В первом примере вы наследуете базовый класс (MonoBehavior) и реализуете интерфейс (ICentroidHitLIstener ').

У вас есть доступ ко всем членам MonoBehavior из класса HitController, и ваш класс HitController должен обеспечить реализацию для всех членов, определенных в интерфейсе ICentroidHitLIstener.

Во втором примере вы реализуете интерфейс ICentroidHitLIstener.

Ответ 5

Это легко.
Наследование позволяет получить базовые функции класса.
Реализация создает функции в соответствии с указанным протоколом.

класс: класс и интерфейс: интерфейс - наследование,
класс: интерфейс реализуется,
class: abstract_class - это как реализация, так и наследование.