2022年01月25日
川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説!total 806 count

型メンバーのオーバーロード: 同じ名前のメソッドが2つあるぞ!

Written By: 川俣 晶連絡先

前提知識 §

Console.WriteLineメソッド, 文字列の基礎, 変数の基礎, メソッドの基礎, paramsキーワード

解説 §

 型のメンバーはオーバーロードできます。オーバーロードとはメソッドやコンストラクタで、名前は同じでも引数の型が数が違うバリエーションを記述可能にする機能です。

 この機能は、クラスライブラリにも多く使われています。

 たとえば、最大値を取得するMath.Maxメソッドが整数でも実数でも使用できるのは、整数を受け取る多数のメソッドと実数を受け取る多数のメソッドが全てオーバーロードされて並んでいるからです。

罠の数々 §

  • メソッドの戻り値の型が違うだけではオーバーロードは成立しない。引数の違いが必要だ
  • メソッドの引数の名前が違うだけではオーバーロードは成立しない。引数の型か数が違う必要がある
  • 名前が紛らわしいが、オーバーロード(overload)とオーバーライド(override)は全く違う別の機能である。間違えないように注意しよう。うっかり間違えて恥を書いた人もいるぞ

参考リンク §

メンバーのオーバーロード

Math.Max メソッド

サンプルソース: overload §

var x = new MySample();

x.SetMessage();

Console.WriteLine(x.MyMessage);

x.SetMessage(1);

Console.WriteLine(x.MyMessage);

x.SetMessage(123,456);

Console.WriteLine(x.MyMessage);

x.SetMessage("Hello World");

Console.WriteLine(x.MyMessage);

class MySample

{

    public string MyMessage { get; set; }

    public void SetMessage()

    {

        MyMessage = "ハロー";

    }

    public void SetMessage(int x)

    {

        MyMessage = $"x={x}";

    }

    public void SetMessage(int x, int y)

    {

        MyMessage = $"x={x} y={y}";

    }

    public void SetMessage(string message)

    {

        MyMessage = message;

    }

}

実行結果 §

ハロー

x=1

x=123 y=456

Hello World

リポジトリ §

https://github.com/autumn009/CSharpPrimer2

練習問題 §

 以下のプログラムの実行結果を予測してみよう。

var x = new X();

x.sub(1, 2);

class X

{

    public void sub(int x, int y)

    {

        Console.WriteLine("case 1");

    }

    public void sub(params int [] args)

    {

        Console.WriteLine("case 2");

    }

}

  1. case 1
  2. case 2
  3. case 1とcase 2両方
  4. x.sub(1, 2);の呼び出しは曖昧だというエラーになる
  5. 実行すると応答がなくなる (ハングアップする)

[[解答]]

Facebook

キーワード【 川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説!
【new_C#入門・全キーワード明快解説!】の次のコンテンツ
2022年
01月
26日
where キーワードとジェネリック: 型から自由な型を作ろう!
3days 0 count
total 1206 count
【new_C#入門・全キーワード明快解説!】の前のコンテンツ
2022年
01月
24日
this: 私はだあれ? 自己参照の手段
3days 0 count
total 766 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

http://mag.autumn.org/tb.aspx/20220125090324
サイトの表紙【new_C#入門・全キーワード明快解説!】の表紙【new_C#入門・全キーワード明快解説!】のコンテンツ全リスト 【new_C#入門・全キーワード明快解説!】の入手全リスト 【new_C#入門・全キーワード明快解説!】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.