1) It sounds like your object model may be wrong, which would be why "OO is broken
". I would check that in the first instance.
With respect to how the "problem" would be solved in C#:
2) As lukeer
has suggested, you could create a static method in a class, possibly a static class, related to the type of object the method deals with.
-- In the case of "FileExists
" there is already a .NET method implemented precisely in this way; a static method of the File
] class: System.IO.File.Exists
3) You could create an extension method to the type of object that the function deals with.
4) You could implement an interface class and define each class as having that interface. This is particularly useful if you need the same method(s) which can behave differently, in a class-specific way. (E.g. Dispose