佐々木屋

技術的なことから趣味まで色々書きます

1.C#、VB.NET-3.クラス

遅延評価と先行評価

式や配列などの走査で必要な要素を必要な時だけ評価するような挙動を遅延評価と言います。イテレーターは遅延評価される処理の典型です。LINQなどでも遅延評価があります。例えば、イテレーターでも出てきた以下の配列処理を考えます。 private List<string> Naiyo()</string>…

可変長引数②

可変長引数は引数無しで呼べる 可変長引数のメソッドに対してなにも指定せずメソッドを呼ぶと、nullが渡されます。つまり、メソッド側は空配列が作成されます。 private void TotalSum3(params int[] values) { Console.WriteLine(values.Count()); } public…

可変長引数①

ちょっと難しい言葉ですが、要はメソッドに渡せる引数の数が可変ということです。例えば以下のような同じ種の引数を複数必要とするメソッドを考えます。単純に引数を足す処理です。 引数は配列となっているので、当然メンバー変数を一旦配列に変換して引数に…

オプション引数②

オプション引数がC#で長らく導入されてこなった詳しい経緯は不明ですが、私が想像するに「オーバーロードと機能がかぶるから」が一番の理由かなーと思っています。オプション引数とオーバーロードを組み合わせてしまうと、当然挙動が分かりにくくなりますの…

イテレーターの基本

メソッドの戻り値やgetterプロパティでreturnではなくyield returnした構文のことをイテレーター(メソッド)と呼びます。イテレーターの概念はRubyやPythonもC#とほぼ同様です。なお、yieldはイールドと呼びます。イテレーターの概念は現在のオブジェクト指…

オプション引数①

メソッドの引数を省略、既定値を設定できる機能をオプション引数と呼びます。オプション引数はC++やVB.NETでは昔からありましたが、C#では.NET Framework4.0から初めて導入されました。 オプション引数 C#は引数に既定値を設定するとオプション引数となりま…

クラスを考える⑥(呼び出し)

自作クラスを作ったわけですが、通常クラスの場合と静的クラスの場合で呼び出し方が少し異なります。 通常のクラス 通常のクラスはそのクラス専用にインスタンスを作成する必要がある為、newを使います。 以前作成したたい焼きクラスを使ってみます。 public…

クラスを考える⑤(メソッドの引数とプロパティ)

VB6で何かメソッド(サブプロシージャ)を作成する場合、public変数を用意するか引数を持たせるかになると思います。オーバーロードはありませんので、非常に冗長な関数群が出来るのが特徴です(但し仕様上そちらの方が効率的な場合もあります)。オブジェク…

クラスを考える④(静的クラス)

静的クラス(モジュール)のおさらい 静的クラス(VB.NETではモジュールと言います)は通常クラスと違い、インスタンスを作成しないクラスです。よって、newキーワードによる静的クラスの変数を作成することは出来ません。と言いつつ、実際には一つだけ実体…

クラスを考える③(勘違い)

ここまでのお話で、知らず知らずに「現実世界とプログラミング世界の乖離」が出てきています。じゃあクラスの中身(フィールドやメソッド)はあんこの量とか焼き加減だけど、現実のたい焼きの型にはあんこを入れる場所はないし、焼き加減もはたい焼きの型と…

クラスを考える②(クラスとは?インスタンスとは?)

クラスって何? まず、VB6訛が残っている方は、「モジュール」という概念を一旦忘れて下さい。この概念は後程「静的クラス」でお話します。前にも話しましたが、クラスを調べると設計図という言葉が出てきます。確かに設計図という例えは間違いないのですが…

クラスを考える①(前置き)

クラスはオブジェクト指向プログラミングの世界ではなくてはならない存在です。というか、クラスそのものがオブジェクト指向と言っても過言ではないくらい、大切な存在です。クラスって何?という方はググるか本を読んでみてください。「設計図」という表現…

クラスのプロパティ④(アクセスレベル制御)

getter、setterそれぞれにアクセス修飾子を設定することが可能です。 C#のみ、自動実装プロパティでも従来の記述でもどちらも設定可能です。 //読み取り、書き込みともに公開 public string Hoge { get; set; } //読み取りのみ公開、書き込みはクラス内部か…

クラスのプロパティ③(getter/setter制御)

外部からの制御用として読み取り、書き込みの設定制御が可能です。 C#とVB.NETで少し記法が異なりますので注意しましょう。 読み取り専用 //getterのみを記述すれば読み取り専用となる //自動実装プロパティの場合 public string Hoge1 { get; } //通常記述…

クラスのプロパティ②(自動実装)

前回お話した通り、プロパティは自分でgetアクセサとsetアクセサを設定する必要がありました。自動実装プロパティを利用すると、この部分を簡略して記述することが可能です。 //通常 private string _hoge; public string Hoge { get { return _hoge; } set …

クラスのプロパティ①(基本)

クラスのプロパティはオブジェクト指向プログラミングの中でも非常に有用で、クラス構築ではなくてはならない存在です。オブジェクト指向プログラミングの話でよく出てくる「隠蔽」を実現することができます。VB6出身であれば分かりますが、所謂Public変数を…

VB.NETのプロパティは引数を付けられる

便利なのか余計なお世話なのか分かりませんが、VB.NETのプロパティは引数を実装できます。 例えば以下のような感じ。 Private piyo As String() = {"a", "b", "c"} Public ReadOnly Property Hoge(ByVal index As Integer) As String Get Return piyo(index)…