【问题标题】:What is the difference between objects and classes in C#? [duplicate]C#中的对象和类有什么区别? [复制]
【发布时间】:2012-01-22 22:07:51
【问题描述】:

可能重复:
Difference between object and instance

我有几个问题:

  1. 类的每个实例(抽象类除外)都是一个对象?
  2. 抽象类不能被实例化,因此它们不是对象?

谁能帮助我更好地理解上述与 C# 相关的概念?

【问题讨论】:

标签: c# .net oop class


【解决方案1】:
  1. 对象是类的实例。

  2. 类是对象的定义。在实例化之前,它实际上并没有成为对象。由于无法实例化抽象类,因此无法创建该类型的对象。需要定义子类才能创建对象。

【讨论】:

  • 这是否意味着对象和类的实例是相同的?
【解决方案2】:
  1. 是的,类的每个实例都是一个对象。

  2. 类(无论是否抽象)不是对象。它们是类型。

【讨论】:

  • 即使抽象类可以被实例化,它们仍然不是对象。
  • 需要注意的是,在某些语言中,类也是对象。
  • @marco-fiset 好吧,这与 C# 密切相关,所以不确定其他语言与这里有什么关系。
【解决方案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】:

      一个抽象类永远不能被实例化(因此永远不能成为一个对象)。如果您创建从抽象基类继承的类并实例化它,它将具有抽象类的属性以及它自己的属性。创建抽象基类的目的是“强制”派生类实现某些功能(类似于接口,但不完全是)。

      【讨论】:

      • 也就是说,一个接口不能any实现的方法,但就是这样:一个接口。
      【解决方案6】:

      类的每个实例(抽象类除外)都是一个对象?

      是的。这就是“实例”的定义。

      抽象类不能被实例化,因此它们不是对象?

      类与实例或对象不同。对象是类的一个实例。想象一个动物园模拟。一个对象就像一只特定的狮子,而一个类更像是对狮子是什么的描述。抽象类是对事物的描述,这些描述过于模糊,以至于仅基于该描述构建事物​​是合理的(例如“动物”)。这就是为什么你不能实例化它们。像 Animal 这样的东西可能对程序来说太模糊而无法直接请求;相反,该程序只会请求更具体的东西,例如 Lion、Tiger 或 Mongoose。

      【讨论】:

        猜你喜欢
        • 2011-11-15
        • 1970-01-01
        • 2019-12-14
        • 2020-03-20
        • 2012-01-19
        • 2011-04-27
        • 2019-02-09
        相关资源
        最近更新 更多