it-swarm-pt.tech

Qual é a diferença entre objetos e classes em C #?

Possível duplicado:
Diferença entre objeto e instância

Eu tenho algumas perguntas:

  1. Toda instância de uma classe (exceto uma classe abstrata) é um objeto?
  2. Classes abstratas não podem ser instanciadas, portanto não são objetos?

Alguém poderia me ajudar a entender melhor os conceitos acima relacionados ao C #?

11
user793468
  1. Um objeto é uma instância de uma classe.

  2. Uma classe é a definição de um objeto. Na verdade, ele não se torna um objeto até ser instanciado. Como uma classe abstrata não pode ser instanciada, nenhum objeto desse tipo pode ser criado. Uma subclasse precisaria ser definida para que um objeto fosse criado.

25
Kyle Trauberman
  1. Sim, toda instância de uma classe é um objeto.

  2. Classes (abstratas ou não) não são objetos. Eles são tipos.

12
Mark Byers

Existe uma analogia comum para talvez mostrar mais claramente qual é a diferença entre os conceitos de classe e objeto.

Uma aula é como uma receita. Um objeto é um bolo. A partir de uma receita, você pode construir muitos bolos. Uma receita pode conter apenas dicas (seja abstrata) e deixa espaço para sua própria criação de uma receita (classe de implementação) a partir da qual você pode criar bolos (objetos).

Portanto, uma classe não é um objeto, é a descrição de como os objetos dessa classe se parecem. As classes abstratas contêm métodos e outras informações úteis para a implementação de classes derivadas dessa classe abstrata. Os objetos não podem ser criados/instanciados a partir de uma classe abstrata (porque sua definição não está completa).

10
jdehaan
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.
6
demas

Uma classe abstrata nunca pode ser instanciada (e, portanto, nunca pode se tornar um objeto). Se você criar uma classe que herda de uma classe base abstrata e instancia-la, ela terá propriedades da classe abstrata e também suas próprias propriedades. O objetivo por trás da criação de uma classe base abstrata é "impor" as classes derivadas para implementar determinadas funcionalidades (semelhantes a uma interface, mas não totalmente).

2
Reinderien

Toda instância de uma classe (exceto uma classe abstrata) é um objeto?

Sim. Essa é a definição de "instância.

Classes abstratas não podem ser instanciadas, portanto não são objetos?

Classes não são iguais a instâncias ou objetos. Um objeto é uma instância de uma classe. Imagine uma simulação de zoológico. Um objeto é como um leão específico, enquanto uma classe é mais como uma descrição do que é um leão. Classes abstratas são descrições de coisas muito vagas para tornar razoável a criação de algo baseado apenas nessa descrição (por exemplo, "Animal"). É por isso que você não pode instancia-los. Algo como um Animal pode ser muito vago para o programa solicitar diretamente; em vez disso, o programa solicitará apenas coisas mais específicas, como Lion, Tiger ou Mongoose.

2
Gravity