エンジニアの将来って?

現在8年目エンジニアがプログラムの解説、ゲームの研究を書く雑記ブログです

【C#】省略可能な引数をもつメソッドについて解説します

こんにちは。たいら(@tairaengineer2)です。
この記事では、C#省略可能な引数をもつメソッドについて解説します。

スポンサーリンク

 

前提条件

この記事では、Visual Studio 2017 Communityを使っています。
インストールの仕方は、下の記事をご参考ください。

www.tairax.com

省略可能な引数をもつメソッドとは

基本メソッドを呼ぶとき、引数を渡してあげないとエラーになります。
しかし、引数のパラメータにデフォルト値を設定しておくと、デフォルト値を設定した引数は省略可能になります。

省略可能な引数をもつメソッドは、以下のように書きます。
↓の例だと、引数【number2】が省略可能で、デフォルト値として9が設定されます。

public string Sample(int number1 , int number2 = 9)
{
   return "";
}

省略可能な引数をもつメソッドは、引数に与える値がほぼ決まっているときにとても便利です。
与える値がほぼ決まっているなら、わざわざ引数を書くのめんどくさいですし。
なので、上記のメソッドを呼ぶとき

string answer = sample.Sample(1);

という風に書けちゃいます。

省略可能な引数をもつメソッドを作成するときのポイント

省略可能な引数をもつメソッドを作成するときのポイントは、指定が必須全部引数後ろにデフォルト値を設定したい引数を書くことです。

実例を使って解説します。
さきほど書き方のサンプルとして使ったSampleメソッドの引数【number1】のみにデフォルト値を↓のように設定したとします。

public string Sample(int number1 = 9 , int number2)
{
   return "";
}

すると、

f:id:Tairax:20200121110757p:plain

省略可能なパラメーターはすべて必須パラメーターの後で指定する必要があります

というエラーメッセージが表示されます。
エラーとなる理由は、エラーメッセージの通りなんですが指定が必須な引数のあとに省略可能な引数を指定するように決まっているためです。
そのため【number1】にもデフォルト値を設定したい場合、

  • 【number1】を後ろに書く
  • 【number2】にもデフォルト値を設定

のどちらかをしてあげる必要があります。

省略可能な引数のメソッドを作る場合、省略可能な引数は後ろに書く!ということを気を付けましょう!

では、次の章で実際に使ってみましょう!

解説で使うC#プログラムの概要

解説では、2つプログラムを使います。

  • メインクラス
  • イヌクラス

イヌクラスには飼い主の情報を文字列で返すメソッドがあります。
このメソッドは引数が省略可能なメソッドで作成しています。
このメソッドに対して

  • 省略可能な引数に値を与えた場合
  • 省略可能な引数に値を与えなかった場合

上記2パターンで試して、結果をコンソールに表示します。

コンソールプロジェクトを作成するやり方は下の記事をご参考ください。

www.tairax.com

プログラムを作成したあと、ビルドをするやり方はこちらの記事をご参考ください。

www.tairax.com

メインクラス

using System;

namespace ConsoleApp1
{
    /// <summary>
    /// 省略可能な引数サンプル
    /// </summary>
    class Program
    {
        /// <summary>
        /// メイン
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            Dog akita = new Dog("タマ", 1);
            Console.WriteLine(akita.GetDogMessage("田中", 36));

            Dog gold = new Dog("さくら", 5);
            Console.WriteLine(gold.GetDogMessage("佐藤"));
        }
    }
}

タマの飼い主は省略可能な引数に値を入れています。
さくらの飼い主には省略可能な引数には体を入れていません。

イヌクラス

using System;

namespace ConsoleApp1
{
    /// <summary>
    /// イヌクラス
    /// </summary>
    /// <remarks>ペットのイヌ</remarks>
    class Dog
    {
        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <remarks>引数なし</remarks>
        public Dog()
        {
        }

        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <remarks>引数2つ</remarks>
        /// <param name="name">名前</param>
        /// <param name="age">年齢</param>
        public Dog(string name, int age)
        {
            Name = name;
            Age = age;
        }

        /// <summary>
        /// イヌの飼い主のメッセージを取得
        /// </summary>
        /// <remarks>飼い主を説明するメッセージ</remarks>
        /// <param name="ownerAge">年齢</param>
        /// <param name="ownerName">名前</param>
        /// <returns>メッセージ</returns>
        public string GetDogMessage(string ownerName, int ownerAge = 20)
        {
            return $"{Name}の飼い主の名前は{ownerName},年齢は{ownerAge}歳";
        }

        /// <summary> 名前 </summary>
        public string Name { get; set; }
        /// <summary> 年齢 </summary>
        public int Age { get; set; }
    }
}

省略可能な引数を持つメソッドは、【GetDogMessage】です。
引数【ownerAge】に値を設定しない場合、デフォルト値として20が設定されます。

$"{Name}の飼い主の名前は{ownerName},年齢は{ownerAge}歳";

の書き方は文字列補完というものです。
詳しくはこちらの記事をご参考ください。

www.tairax.com

実行結果

タマの飼い主の名前は田中,年齢は36歳
さくらの飼い主の名前は佐藤,年齢は20歳
続行するには何かキーを押してください . . .

f:id:Tairax:20200121115211p:plain

想定通り、さくらの飼い主にデフォルト値である20が設定されていることが確認できました!

 

スポンサーリンク

 

まとめ:省略可能な引数をもつメソッドを使ってみよう!

以上が省略可能な引数をもつメソッドの解説です。
引数に与える値がほぼほぼ決まっているならぜひ、使ってみてください!

あなたのご参考になったのなら、とても嬉しいです(*´▽`*)
ではでは~(・ω・)ノシ

 

 

ほかにもC#解説記事を書いてます。
よければご参考ください。

【C#】文字列がnullまたは空かを簡単に判定できるstring.IsNullOrEmptyメソッドを解説します

【C#】ファイルの存在チェックをするFile.Existsメソッドを解説します

【C#】はてな2つの演算子、null合体演算子について解説します

 

今までブログで書いたC#の解説記事のまとめは、こちらをご参考ください。

【C#】ブログで書いた文法記事のまとめ