だから私はちょうど関数のオーバーロードについて考えています...
オーバーロードされたメソッドは同じ名前を共有しますが、一意の署名を持ちます。パラメータの数、パラメータのタイプ、またはその両方が異なる必要があります。異なる戻り値の型だけに基づいて関数をオーバーロードすることはできません。
setName
では、次の例では、ミドル ネームとラスト ネームの値にオプションのパラメーターを使用するのではなく、オーバーロードする必要があるのはなぜでしょうか?
class funOverload
{
public string name;
//overloaded functions
public void setName(string last)
{
name = last;
}
public void setName(string first, string last)
{
name = first + "" + last;
}
public void setName(string first, string middle, string last)
{
name = first + "" + middle + "" + last;
}
//Entry point
static void Main(string[] args)
{
funOverload obj = new funOverload();
obj.setName("barack");
obj.setName("barack "," obama ");
obj.setName("barack ","hussian","obama");
}
}
少なくとも、以下を使用すると、記述する必要があるコードの量が削減されます。
public void setName(string first, string middle = "", string last = "")
{
name = first + "" + middle + "" + last;
// name = "barack" + "" + "";
}
//Entry point
static void Main(string[] args)
{
funOverload obj = new funOverload();
// could optionally set middle and last name values here as well
obj.setName("barack");
}
オーバーロードの概念は理解していますが、オプションのパラメーターを使用するよりも望ましいオプションである理由がわかりません (またはその逆)。
誰でも説明できますか?
参考までに、私がオーバーロードした最初の関数を次に示します: http://pastebin.com/ynCuaay1
この関数を使用するとMySqlContext.GetReader()
、パラメーターのリストの有無にかかわらず呼び出すことができます...呼び出す必要があるよりもコードがずっときれいになったと思いましたGetReader(sql, args.ToArray())
ずっと