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

Возможный дубликат:
Разница между объектом и экземпляром

У меня есть несколько вопросов:

  • Каждый экземпляр класса (кроме абстрактного класса) является объектом?
  • Абстрактные классы не могут быть созданы, следовательно, они не являются объектами?

Может ли кто-нибудь помочь мне лучше понять приведенные выше концепции, поскольку они относятся к С#?

Ответ 1

  • Объект - это экземпляр класса.

  • Класс - это определение объекта. Он фактически не становится объектом до момента его создания. Поскольку абстрактный класс не может быть создан, объект такого типа не может быть создан. Подкласс должен быть определен для создания объекта.

Ответ 2

  • Да, каждый экземпляр класса является объектом.

  • Классы (абстрактные или нет) не являются объектами. Это типы.

Ответ 3

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

Класс похож на рецепт. Объект - это торт. Из одного рецепта вы можете построить много тортов. Рецепт может содержать только намеки (быть абстрактными) и оставлять место для вашего собственного создания рецепта (класса реализации), из которого вы можете затем построить торты (объекты).

Итак, класс не является объектом, это описание того, какие объекты этого класса выглядят. Абстрактные классы содержат методы и другую информацию, полезную для реализации классов, происходящих из этого абстрактного класса. Объекты не могут быть созданы/созданы из абстрактного класса (поскольку это определение не является полным).

Ответ 4

class Cat {} // It is a cat. Just a cat. Class is a general issue.

myCat = new Cat("red", "5kg", "likes milk", "3 years old"); // It is my cat. It is an object. It is really a cat. 

yourCat = new Cat("gary", "3kg", "likes a meal", "5 years old"); // It is your cat. Another cat. Not my cat. It is really a cat too. It is an object;

abstract class Animal {} // Abstract class
animal = new Animal(); // It is not correct. What is 'animal'? Cat, dog, cow? I don't know.

class Dog : Animal {} // It is a class. It is a dog in general. 
someDog = new Dog("brown", "10 kg", "likes cats"); // It is really a dog. It is an object.

Ответ 5

Абстрактный класс никогда не может быть создан (и поэтому никогда не может стать объектом). Если вы создаете класс, который наследуется от абстрактного базового класса, и создавайте его, он будет иметь свойства абстрактного класса, а также его собственные свойства. Цель создания абстрактного базового класса - "принудительное" получение классов для реализации определенных функций (подобно интерфейсу, но не совсем).

Ответ 6

Каждый экземпляр класса (кроме абстрактного класса) является объектом?

Да. Это определение "instance.

Абстрактные классы не могут быть созданы, следовательно, они не являются объектами?

Классы не совпадают с экземплярами или объектами. Объект является экземпляром класса. Представьте себе зоопарк. Объект подобен определенному льву, тогда как класс больше похож на описание того, что такое лев. Абстрактные классы - это описания вещей, которые слишком расплывчаты, чтобы сделать разумным создание чего-либо, основанное только на этом описании (например, "Животное" ). Вот почему вы не можете создавать их. Что-то вроде Animal может быть слишком расплывчатым для того, чтобы программа запросила напрямую; вместо этого программа будет запрашивать только более конкретные вещи, такие как Lion, Tiger или Mongoose.