Абстрактные классы и абстрактные методы - PullRequest
0 голосов
/ 08 января 2019

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

Я понял, что вы не можете использовать абстрактный класс для игрового объекта, но какова сила использования абстрактного класса? Также абстрактный метод может быть реализован только в абстрактном классе, и почему вы не можете реализовать метод в абстрактном классе, а только переопределить его?

Я также читал кое-что об абстрактном методе, принимающем component<T>, и я не выяснил, в чем смысл этой надежды, что некоторые из вас, умные люди, могут помочь запутанному программисту: D

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Абстрактные классы используются для моделирования общего «мастер-класса», который никогда не будет использоваться сам по себе, но его производные классы будут использовать эти данные / функции.

Например, скажем, ваше наследство

     Animal

Bird Mammal Reptile

В вашей игре вы когда-либо будете использовать только Птицу / Млекопитающее / Рептилию, поскольку это конкретные модели животных, но все они будут иметь хотя бы некоторое общее количество кода. Health, Hunger и может предоставлять некоторые абстрактные функции, такие как Move (), которые будут реализованы на уровне подкласса.

С инженерной точки зрения, это позволяет вам делать причудливые вещи, такие как создание массива / вектора типа Animal, который может содержать птиц, млекопитающих и рептилий.

Допустим, у нас есть вектор типа Animal с 1 из каждого подкласса.

Тогда мы можем сделать

foreach (Animal a in animals)
   a.Move(100)

Птицы / Млекопитающие / Рептилии движутся по-разному, но поскольку у нас есть эта абстрактная функция без реализации на базовом уровне, наш код может гарантировать, что в какой-то момент в дереве наследования она будет реализована.

Другими популярными примерами являются абстрактный класс Item и абстрактная функция item.Use (); Предметом может быть зелье, свиток, яблоко (класс Еда). Это не имеет значения, потому что все они используют один и тот же интерфейс базового уровня.

0 голосов
/ 08 января 2019

Я думаю, что чтение статьи Microsoft об абстрактных классах и методах было бы чрезвычайно полезным. Вы используете абстрактные классы, предоставляя базовую функциональность классу и наследуя его.

Вы также путаете некоторые формулировки с implement и override: вы реализуете абстрактный метод, переопределяя его.

Component<T> означает, что класс Component с параметром типа является тем, что вы определяете. Это определяется в C # как Generics . Вы используете их с базовыми классами Unity3D, такими как Component<GameObject> или GetComponent<GameObject>.

...