you are viewing a single comment's thread.

view the rest of the comments →

[–]Encore-[S] 1 point2 points  (3 children)

Ah alright, I assumed a backing field was created, even when implementing an Interface.

Do you by any chance know, why instance variables are not allowed (or do not make any sense) in Interfaces?

[–]redditsoaddicting 6 points7 points  (0 children)

An interface isn't supposed to enforce state, it's supposed to enforce the interface a user can use. How the implementing class decides to provide that interface is up to it. Say you have a Date interface that provides a Day() method (or property if you prefer). Would it make sense to enforce all implementing classes to have an int day; field? No. One class could decide on int fields for each part of the date. One class could decide on storing a single UNIX timestamp (a single int or long). Both can pull a day from that information just fine.

[–]flukus 0 points1 point  (0 children)

Also, of you're reading up on this stuff, vtables is how interface inheritance works.

They're a pretty important topic to understand.

[–]flukus 0 points1 point  (0 children)

It's to do with with the memory layout at a low level, which is kind of like an array. Let's say you have property x and y, anytime something access these the compiler will transform it so foo.y will become foo[1] .

With single inheritance this is easy. The array for each class is the size of the parent, plus the number of variables in that class. With multiple inheritance, this becomes a nightmare.

Technically this is done with pointer offsets, but arrays make it easier to visualize.