12
votes

Quelle est la différence entre les objets et les classes en C #?

Duplicaté possible:

Différence entre objet et instance

J'ai quelques questions:

  1. chaque instance d'une classe (sauf une classe abstraite) est un objet?
  2. Les classes abstraites ne peuvent pas être instanciées, elles ne sont donc pas des objets?

    Quelqu'un pourrait-il m'aider à mieux comprendre les concepts ci-dessus lorsqu'ils se rapportent à C #?


4 commentaires

1. Oui (données # 2) et 2. Oui. Une balle de courbe est des classes statiques qui sont fondamentalement un seul objet pour la durée de vie d'un processus.


Il est utile de penser aux classes abstraites équivalentes aux interfaces. Ce ne sont que des interfaces qui peuvent fournir une implémentation par défaut.


Related: Stackoverflow.com/questions/3323330/... et Stackoverflow.com/questions/3686647/...


Poste connexe - Careerbaba.in/2014/03/ ...


6 Réponses :


12
votes
  1. Oui, chaque instance d'une classe est un objet.

  2. Les classes (résumé ou non) ne sont pas des objets. Ce sont des types.


3 commentaires

Même si des classes abstraites pourraient être instanciées, elles ne seraient toujours pas des objets.


Il convient de noter que dans certaines langues, les classes sont également des objets.


@ Marco-Fiset Ceci est spécifiquement lié à C #, alors non plus sûr de la manière dont d'autres langues sont même pertinentes ici.



27
votes
  1. Un objet est une instance d'une classe.

  2. Une classe est la définition d'un objet. Il ne devient pas réellement un objet avant d'être instancié. Étant donné qu'une classe abstraite ne peut pas être instanciée, aucun objet de ce type ne peut créer. Une sous-classe devrait être définie pour qu'un objet créé.


1 commentaires

Cela signifie-t-il que des objets et une instance de classe sont identiques?



2
votes

Une classe abstraite ne peut jamais être instanciée (et peut ne jamais devenir un objet). Si vous créez une classe qui hérite d'une classe de base abstraite et que vous l'instanciez, il aura des propriétés de la classe abstraite ainsi que ses propres propriétés. L'objectif de la création d'une classe de base abstrait est de «appliquer» des classes dérivant pour mettre en œuvre certaines fonctionnalités (semblables à une interface, mais pas tout à fait).


1 commentaires

À savoir une interface ne peut pas avoir toute méthode mise en œuvre , mais que: une interface.



10
votes

Il y a une analogie commune à peut-être plus claire montrer quelle est la différence entre les concepts de classe et d'objet.

Une classe est comme une recette. Un objet est un gâteau. D'une recette, vous pouvez construire de nombreux gâteaux. Une recette ne peut contenir que des allusions (être abstraites) et laisser une place pour votre propre création d'une recette (classe d'implémentation) à partir duquel vous pouvez ensuite créer des gâteaux (objets).

Donc, une classe n'est pas un objet, c'est la description de quels objets de cette classe ressemblent. Les classes abstraites contiennent des méthodes et d'autres informations utiles pour la mise en œuvre de classes dérivant de cette classe abstraite. Les objets ne peuvent pas être créés / instanciés à partir d'une classe abstraite (car la définition n'est pas complète).


0 commentaires

2
votes

Chaque cas d'une classe (sauf une classe abstraite) est un objet?

Oui. C'est la définition de "instance".

Les classes abstraites ne peuvent pas être instanciées, elles ne sont donc pas des objets?

Les classes ne sont pas identiques à des instances ou des objets. Un objet est une instance d'une classe. Imaginez une simulation de zoo. Un objet est comme un lion spécifique, alors qu'une classe ressemble davantage à une description de ce qu'est un lion. Les classes abstraites sont des descriptions de choses trop vagues pour rendre raisonnables de construire quelque chose en fonction de cette description (par exemple. "Animal"). C'est pourquoi vous ne pouvez pas les instantiez. Quelque chose comme un animal pourrait être trop vague pour que le programme demande directement; Au lieu de cela, le programme ne demandera que des choses plus spécifiques telles que Lion, Tiger ou Mongoose.


0 commentaires

7
votes
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.

0 commentaires