まえがき
このレポートは「独習C#」で学んだ内容をSkype勉強会での活動日誌として、「書面としてアウトプットする」こと、「電気系の学生の成果物を作るための意識高い系(笑)のレポート」です。完全初心者なので、勉強会参加者の先輩たちから様々なツッコミを頂きながら書いております。それゆえに先輩たちの目から外れた誤字脱字等ございますが、ぜひともツッコミいただいて、私の勉強にさせていただければと思います。
可変長引数の注意!!
先週書いた可変長引数ですが、これには注意が有ります。
1. 可変長引数はメソッドに一つだけしか宣言が出来ない。さらに、この可変長引数は最後に配置をすること!
2. 想定される引数まで、可変長引数にまとめない。
3. 可変長引数で「一個以上の引数」を表す方法
1. 可変長引数はメソッドに一つだけしか宣言が出来ない。さらに、この可変長引数は最後に配置をすること!
以下の書き方はエラーですよ!
void Hoge(params int[] x, int y) //=>可変長引数が引数リストの末尾でない。
void Hoge(params int[] x, params int[] y) //=>可変長引数が複数ある
2. 想定される引数まで、可変長引数にまとめない。
引数をまとめすぎると他人の手に渡った時に、可読性が死ぬ程落ちます。なので、構造上は可能ですが、絶対やめましょう。
3. 可変長引数で「一個以上の引数」をあらわす方法
前回書いたコードで、可変長引数派、省略が可能となっています。
しかし、引数なしで呼び出す意味はありませんので、最低でも1個以上の引数を要求したいと思うかもしれません。
そんなときは、"ifで配列長を取得した時にエラーを出せばええやないかい"ってなるんですが、それでは実行時にエラーがスローされるので、問題はもっと早く検知すべきなので、引数を用意してから、可変長引数を入れ、その中で、最初の引数を別の引数に代入すると・・・出来ますが・・・
値渡しと参照渡し
値渡しと、参照渡しはよくご存知かと。しかし、C#では、データ型の値型/参照型が絡んでくると、
- 値型の参照渡し
- 参照型の値渡し
- 値型の値渡し
- 参照型の参照渡し
値型の値渡し
using System;
namespace Basic
{
class Program
{
public int CountUp(int data)
{
data++;
return data;
}
static void Main(string[] args)
{
var data = 1; //上のCountUpのdataと、このdataは別物!
var p = new Program();
Console.WriteLine(p.CountUp(data));
Console.WriteLine(data);
}
}
}
値渡しとは、実引数(呼び出し元の値)をメソッド側の仮引数にコピーすることを言います。
実行結果は以下のようになりました。
-------------------------------------------------------------------
You may only use the Microsoft .NET Core Debugger (vsdbg) with
Visual Studio Code, Visual Studio or Visual Studio for Mac software
to help you develop and test your applications.
-------------------------------------------------------------------
2
1
値渡しは他にも種類があるので、また次回!!!
あとがき
最近Qiita Donで宣伝しまくってます!!そのおかげなのか、少し閲覧数は伸びました!
参加してみたいよ、仕方ねぇなぁ、いちやの勉強少しみてやるか・・・と思った方、検討してみてください!
お願いします!