Your examples are a little odd because while
float are specific types, interfaces and delegates are kinds of type – just like
enum are kinds of value types.
I’ve written an explanation of reference types and value types in this article. I’d be happy to expand on any bits which you find confusing.
The “TL;DR” version is to think of what the value of a variable/expression of a particular type is. For a value type, the value is the information itself. For a reference type, the value is a reference which may be null or may be a way of navigating to an object containing the information.
For example, think of a variable as like a piece of paper. It could have the value “5” or “false” written on it, but it couldn’t have my house… it would have to have directions to my house. Those directions are the equivalent of a reference. In particular, two people could have different pieces of paper containing the same directions to my house – and if one person followed those directions and painted my house red, then the second person would see that change too. If they both just had separate pictures of my house on the paper, then one person colouring their paper wouldn’t change the other person’s paper at all.