Me and my co-workers are having a bit of a discussion about one of the code analysis issues thrown by visual studio:
CA1822 Mark members as static The 'this' parameter (or 'Me' in Visual Basic) of 'UnitTest.CreateSimulation()' is never used. Mark the member as static (or Shared in Visual Basic) or use 'this'/'Me' in the method body or at least one property accessor, if appropriate. UnitTests.ModuleSimulator UnitTest.cs 68
I personally think making methods static is against object orientated programming, it's not necessarily bad practice but, I certainly think it's not good practice either. I do understand that making it static can improve the performance as stated in the msdn library:
Emitting nonvirtual call sites will prevent a check at runtime for each call that makes sure that the current object pointer is non-null. This can achieve a measurable performance gain for performance-sensitive code.
So my question is as follows, is making static methods/properties/fields against object orientated programming? And if not, should one always declare methods static when the code analysis prompts the option? (Disregarding all exceptions such as overriding the method somewhere else and using a "this" parameter in the overridden method.)