If I have classes A, B, C, D, E
, and interfaces like X, Y, Z
, and model a system like:
class B : A, X
class C : B, Y
class D : C, Z
cla
It would create a single object - an instance of E - but that would include all the fields declared in the class hierarchy. (Interfaces can't declare fields, so they're irrelevant to the data within the object itself.) It's only fields (and any attributes affecting layout, admittedly) that contribute to the memory taken up by an object.
The reference to the instance of E could be "converted" to a reference of type A, B, C, D, X, Y or Z as an identity-preserving reference conversion - i.e. it would still be a reference to the same object.
The inheritance extends the Type and does not create instances. You have one single instance of E that includes the data defined by A, B, C, D and E. It provides methods and property accessors defined by these classes and the interfaces X, Y, and Z.
Yes, it would create 'embedded' instances of A, B, C and D
No, it would not create instances of X, Y and Z (because they are interfaces)
There is no extra overhead for the memory allocation or GC (of ABCD) because the instance of E is allocated as 1 block. Any runtime overhead would entirely depend on the constructors involved.
There will always be a chain of contructors (from E to A) being executed, possibly the default constructor but it's also possible to call multiple constructors at 1 level.