Microsoft itself has confused .NET/C# programmers with lack of consistent explanations for Objects, and, clear distinctions between Objects and
instances of Objects ...
1) Object in an abstract sense as found in the discourse around OOP as programming model, philosophy, a field in Computer Science
2) At times, MS has implied that C# is an OOP language ... I disagree:
2a) SmallTalk was/is an example of a true object-oriented language: everything is an object.
2b) C# has Value Types that are directly stored on the stack: they are primitives whose value is contained in their memory location. imho, these are not objects in the way Classes, Properties, are.
2c) depending on how you view multiple inheritance, C# either does not have this facility, or has a very limited implementation of it (via Interfaces),
A C# Class is the archetypal, mutable, reference Type: imho, the best metaphor is Class is to instance as blueprint is the whatever you construct from the blueprint.
You would not conclude that because you modified the house that the blueprint for the house had simultaneously changed ... and, vice-versa :)
These generalizations are simplified: the allocation and managements of String, and Struct, Enum, etc., are more complex. Making Classes Abstract, or Static, is another "dimension."
Further thoughts and links here: [
^]