The first thing you have to understand is that the "I" in the first names does not refer to the pronoun "I," but rather follows the naming standard that interfaces begin with the capital letter "I."
In that sense, the interfaces are actually named "HasContent," "HasValue," etc, so don't change it to "HaveContent" and "HaveValue", as that would be just as awkward.
With that being said, I can't exactly see what these interfaces are being used for. An interface (by definition) is intended to force a condition on all classes that implement it, and I'm not sure what these interfaces are enforcing--that all classes have a function called HasContent()
?
I think that you should instead focus on interfaces having an is a
relationship. When you declare a class that implements the interface IList
, you are not implying that your class has a list, but rather that your class is a list.
So for example, one of them is IHasGeometry
...well, that gives me the ability to check if it has geometry, but I would realistically only want to deal with figures that are geometric figures, so I would create an interface named IGeometricFigure
instead, thus restricting its use to anything that operates on geometric figures.
I agree that the names sound awkward, but I think that is more because these interfaces are being used for an awkward purpose, not because they are improperly named.