There is some level of preference, but my personal approach is that this kind of potential has a huge gigantic mess.
For example, you start with two projects: A and B, each of which decides to implement all sorts of amazing useful current methods into String.
Project A decided that String needed the isEmpty function, which returns true if the string has zero length or only a space.
Project B decided that String needed the isEmpty function, which returns true if the string is of zero length, and the isEmptyOrWhitespace function, which returns true if the string is of zero length or only spaces.
Now you have a project that wants to use some code from Project A and some code from Project B. Both of them make extensive use of their custom functions isEmpty . Do you have a chance to join them successfully? Probably no. You are in a cluster arrangement, so to speak.
Please note that this is all very different from extension methods in C #, where you need to at least import the namespace of a static class to get the extension method, there is no conflict at run time and can reasonably consume from A and B in the same project if You did not import the extension namespace (hoping that they provided that for this reason their extension classes were in a separate namespace).
source share