two extension methods that have identical signatures are in scope and
accessible, the one with
higher precedence will be invoked. An
extension method’s precedence is based on the mechanism
used to bring
the method into scope. The following list shows the precedence
highest to lowest.
Extension methods defined inside the current module.
methods defined inside data types in the current namespace or any one
parents, with child namespaces having higher precedence than
Extension methods defined inside any type imports in the current file.
Extension methods defined inside any namespace imports in the current file.
Extension methods defined inside any project-level type imports.
Extension methods defined inside any project-level namespace imports.
precedence does not resolve the ambiguity, you can use the fully
qualified name to specify
the method that you are calling. If the Print method in the earlier example is defined in a module
named StringExtensions, the fully qualified name is StringExtensions.Print(example) instead