2011-12-18 13 views
10

Duplicar posibles:
Difference between object and instance¿Cuál es la diferencia entre los objetos y las clases en C#?

que tienen par de preguntas:

  1. Cada instancia de una clase (excepto una clase abstracta) es un objeto?
  2. Las clases abstractas no se pueden crear instancias, por lo tanto, ¿no son objetos?

¿Alguien podría ayudarme a comprender mejor los conceptos anteriores que se relacionan con C#?

+0

1. Sí (dado # 2) y 2. sí. Una bola curva son clases estáticas que son básicamente un solo objeto durante la vida de un proceso. –

+0

Ayuda a pensar en clases abstractas como equivalentes a interfaces. Son solo interfaces que pueden proporcionar una implementación predeterminada. –

+0

Relacionados: http://stackoverflow.com/questions/3323330/difference-between-object-and-instance y http://stackoverflow.com/questions/3686647/whats-the-best-way-to-define-the -words-class-and-object-to-someone-who-hasn –

Respuesta

24
  1. un objeto es una instancia de una clase.

  2. Una clase es la definición de un objeto. En realidad, no se convierte en un objeto hasta que se crea una instancia. Como no se puede crear una instancia de una clase abstracta, no se puede crear ningún objeto de ese tipo. Debería definirse una subclase para que se cree un objeto.

12
  1. Sí, cada instancia de una clase es un objeto.

  2. Las clases (ya sean abstractas o no) no son objetos. Ellos son tipos.

+0

Incluso si es abstracto las clases pueden ser instanciadas, todavía no serían objetos. –

+0

Cabe señalar que en algunos idiomas, las clases también son objetos. –

+0

@ marco-fiset Bueno, esto está relacionado específicamente con C#, por lo que no estoy seguro de cómo otros idiomas son relevantes aquí. – jdmdevdotnet

2

Una clase abstracta nunca se puede crear una instancia (y por lo tanto nunca se puede convertir en un objeto). Si crea una clase que hereda de una clase base abstracta y la instancia, tendrá las propiedades de la clase abstracta, así como sus propias propiedades. El objetivo detrás de la creación de una clase base abstracta es "aplicar" las clases derivadas para implementar cierta funcionalidad (similar a una interfaz, pero no del todo).

+0

A saber, una interfaz * no puede * tener * ningún * método implementado, pero es solo eso: una interfaz. – Gravity

10

Hay una analogía común para mostrar tal vez más claro cuál es la diferencia entre los conceptos de clase y objeto.

Una clase es como una receta. Un objeto es un pastel. De una receta puedes construir muchos pasteles. Una receta solo puede contener sugerencias (ser abstractas) y dejar espacio para su propia creación de una receta (clase de implementación) a partir de la cual puede construir tortas (objetos).

Así que una clase no es un objeto, es la descripción de cómo son los objetos de esa clase. Las clases abstractas contienen métodos y otra información útil para la implementación de clases derivadas de esta clase abstracta. Los objetos no se pueden crear/instanciar de una clase abstracta (porque su definición no está completa).

2

Cada instancia de una clase (excepto una clase abstracta) es un objeto?

Sí. Esa es la definición de "instancia.

Las clases abstractas no se pueden crear instancias, por lo tanto, ¿no son objetos?

Las clases no son lo mismo que instancias u objetos. Un objeto es una instancia de una clase. Imagina una simulación de zoológico. Un objeto es como un león específico, mientras que una clase es más como una descripción de lo que es un león. Las clases abstractas son descripciones de cosas que son demasiado vagas para que sea razonable construir algo basándose solo en esa descripción (por ejemplo, "Animal"). Es por eso que no puedes instanciarlos. Algo como un Animal podría ser demasiado vago para que el programa lo solicite directamente; en cambio, el programa solo solicitará cosas más específicas como León, Tigre o Mangosta.

6
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. 
Cuestiones relacionadas