Overloaded members should provide variations on the same functionality. For example, it would not be correct for a type to have two CopyTo members, where the first member copied data to an array and the second copied data to a file. A common use of member overloading is to provide overloads that take few or no parameters and are easy to use. These members call overloads that are more powerful, but also require more experience to use correctly. The easy-to-use overloads support common scenarios by passing default values to the complex overloads. For example, the File class provides overloads for the Open method. The simple overload Open takes a file path and file mode. It calls the Open overload that takes path, file mode, file access, and file share parameters, and provides commonly used default values for the file access and file share parameters. Developers who do not need the flexibility of the complex overload do not have to learn about file access and sharing models before they can open a file.