Абстрактные классы являются наиболее полезными в ситуациях, когда некоторые члены будут иметь поведение, которое каждая реализация будет обрабатывать самостоятельно. Рассмотрим, например, ReadableDoubleMatrix
класс, с тремя свойствами:
int Rows {get;};
int Columns {get;}
double this[int row, int column] {get;}
Простейшая реализация общего назначения может быть класс ImmutableArrayBackedMatrix который содержит double[,]
, которая заполняется при строится класс, но и другие варианты реализации будут включать IdentityMatrix
, который содержит значение size
[Rows
и Columns
оба возвращаются size
, а this[row, column]
вернет row==column ? 1.0 : 0.0
]. Поскольку эти производные классы не имеют общих полей, было бы бессмысленно включать базовый класс. Однако без каких-либо полей нет ничего значимого, чтобы экземпляр базового класса мог работать с этими свойствами.
Обратите внимание, что даже если хотя бы можно было это сделать. имеют базовый класс, реализующий Rows
и Columns
, чтобы вернуть 1 и this
, чтобы вернуть 0.0, а код может в некоторых случаях найти такой объект полезным, не было бы никаких причин, по которым код должен иметь несколько экземпляров такого элемента. Даже если код часто нуждался в такой матрице и хотел, чтобы он был другого типа из всех других матриц, обычно было бы лучше использовать для этой цели герметичный тип.
Спасибо вам обоим ...... так что основное отличие - это «абстрактное» ключевое слово позволяет мне определить все или некоторые свойства этого абстрактного класса в разных производных классах в соответствии с требованием производного класса, а также его предоставляет некоторые уже определенные свойства (метод в этом случае), которые могут использоваться, когда я создаю объект производного класса. я прав, сэр? – Anadi
@ user2897975 Если некоторые методы или свойства являются абстрактными, весь класс должен быть абстрактным, поскольку он не может использоваться, если реализация, например, метод отсутствует. И да, в основном вы правы, но 1) Не путайте свойства и методы и 2) Все это входит в игру во время компиляции, когда определяется производный класс, а не объект этого производного класса. – helb