Extension methods for methods and properties that don't use non-public data
My personal view is create an extension method if:


The class/interface you wish to extend is not created by you.
The class/interface is created by you but the behavior of the extension method is only required in an assembly that doesn't contain the class (e.g. class Person is defined in MyApp.dll, but GetAge() is only required in MyApp.UI.exe).
The behavior can be defined against a more generic abstraction than the class itself where the implementation is the same but the classes don't share a common base. e.g. create an ILifeSpan interface with DateTime DateOfBirth and DateTime DateOfDeath properties and create the extension method public static double GetAge(this ILifeSpan lifeSpan)


FYI extension methods are just a compiler trick, the generated IL just calls the static method, the this keyword just allows you to write less code in visual studio.

when you call person.GetAge();, it is compiled to PersonExtensions.GetAge(person);