var val = obj.GetValue();
var val = obj.PlayOnAwake; // From Unity
It's not first-person, it's imperative. Simply put, it's a command.
GetValue() Get the value!
PlaySound() Play this sound!
DeleteFile() Delete that file!
These namings are used for methods, especially methods that perform a task (as opposed to returning a known value).
var has = obj.HasValue;
What you're calling third-person, is inquisitive. It poses a question, specifically a yes/no question, because it's representing a boolean nature.
isReadOnly Is this file readonly?
requiresConstantRepaint Does this object require a constant repaint?
isAdmin Is the user an administrator?
These namings are used for booleans, as the yes/no nature of the phrasing mirrors the true/false nature of the boolean.
var val = obj.RequiresConstantRepaint(); // From Unity
There are some methods whose boolean return value are their sole purpose. These methods tend to follow boolean (question) naming schemes instead of method (imperative) naming schemes, to further highlight their purpose of providing a true/false (yes/no) distinction.
class RequireComponentAttribute // From Unity
Attributes follow a slightly different approach. Their naming is not as consistent and is often less semantically inclined than the method/boolean namings mentioned before.
[XmlIgnore] is a stilted imperative ("ignore this in XML form")
[Fact] is a noun
[Obsolete] is an adjective
Most commonly, nouns and adjectives are used since attributes are commonly read as "extra" descriptions tacked on to a class/method/property. But there is no hard line to draw here compared to the much more conventionalized method/boolean namings mentioned before.