佐々木屋

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

オプション引数②

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

インターフェース

クラスの特定機能を保証(強制)する仕組みをインターフェースと言います。恐らく一番有名なインターフェースといえばIDisposableインターフェースですね。IDisposableはDisposeの実装が約束されますので、クラスを呼ぶ場合にusingステートメントが利用でき…

ポリモーフィズム(継承)

継承を利用したポリモーフィズムの実現です。デリゲートの場合はクラス内でも別クラスでも使えますが、継承は別クラスの場合に有効です。しかもデリゲートに比べると普段のクラス宣言と同じように使用出来ることや特別な記法は不要なので、特にVB.NETな方は…

型変換は何を使う?(その①)

型を覚えるときに必ずセットで出てくる型変換(キャスト)の話です。実は、型変換はC#とVB.NETでだいぶ違います。C#は変換方法がだいたい決まっているのですが、VB.NETでは変換方法がありすぎて、プログラマーによってまちまちなのです。そのため初学者はど…

デリゲートの使いどころ ③(マルチキャストデリゲート)

一つのデリゲートで複数のメソッドを連続で実行することをマルチキャストデリゲートと呼びます。これによってメソッドを任意のタイミングで追加して最後に実行するような処理も簡潔に書くことができます。例えば以下のようなメソッドをデリゲートで呼ぶとし…

不要な制御フラグ

制御フラグでの条件分岐はよくある手法の一つですが、これが多くなりすぎると非常に可読性が悪くなります。 課題① 例えば以下のコードを見てみましょう。 int x = 1; int y = 2; bool flg = true; while (flg) { if (x * y > 10) flg = false; ++x; ++y; } D…

シャドウとオーバーライドの違い

VB.NETにはオーバーライドに似たような機能でシャドウがあります。但し、オーバーライドとシャドウは機能としては似ているかもしれませんが、使用される意味としては全くの別物です。初学者は混同しがちなので注意して下さい。読んで字のごとくですが、シャ…

イテレーターの基本

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

オプション引数①

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

null許容型(null判定)

null許容型を利用する上で重要なnull判定方法をいくつか説明します。 int? a = null; Dim a As Integer? = Nothing 等価(Is)による条件判断 if文による等価評価(Is)を行います。 if (a == null) { Console.WriteLine("nullだ"); } else { Console.WriteL…

オーバーライドされた基底クラスメソッドを呼び出す

派生クラスで基底クラスメソッドをオーバーライドされた場合、処理は派生クラス側で上書きされてしまいますが、別に基底クラスメソッドが消えるわけではなくちゃんと呼び出すことが可能です。基底クラスのメソッドを呼ぶ場合はbaseキーワード(VB.NETはMyBas…

null許容型

値型がnullを許容しないことは分かりました。しかし、アプリケーション構築上、nullを許容しなければいけない場面もあります。そこで登場したのがnull許容型です。null許容型は値型の後ろに「?」をつけるだけです。しかし、元々許容型である参照型やstring…

CodeBehindによるファイル追加で発生する問題

ASP.NETのプロジェクトファイルに既存ファイルを追加する場合、通常はVisualStudioのソリューションエクスプローラーから追加します。しかし、状況によってはOSのエクスプローラー上でファイルの移動をする場合があります。この場合、ASP.NETのプロジェクト…

null許容型(C#とVB.NETの違い)

参照型はnullを許容していますが、値型はどうでしょうか。実はここでもC#とVB.NETで微妙に挙動が異なります。 C#におけるnull代入時の挙動 参照型はnullを許容していますが、値型はnull非許容です。つまり、以下のような構文はそもそもコンパイルエラーとな…

this参照

this(VB.NETはMe)が一体どういう意味を持っているのか、どういったときに使用するのかを説明します。そもそも、ローカル変数とフィールド変数の名前がかぶらなければお目にかかることはないわけですが、オブジェクト指向型言語であれば一度や二度はかぶっ…

オーバーライド

よく間違えるNo1のオーバーライドです。「オーバーロード」とよく間違えて使う人がいますが、この二つ全く意味が違いますので混同しないように注意しましょう。オーバーライドはオブジェクト指向の「継承」分野で必要な機能となります。オーバーライドを…

ボックス化って何?

型変換でよく出てくる用語の一つに「ボックス化(又はボクシング)」があります。よくボックス化はコストがかかるとか言われますが、一体何の意味か分かりますか? 値型を参照型に変換する行為 簡単に言うとそういうことです。例えばint型をobject型に変換す…

非同期処理でフォームOpen/Closeを制御する

非同期処理中はスレッドセーフでなければアクセス出来ないことは以前説明しました。 sasaki816.hatenablog.com 今回は同じような内容ですが、非同期でフォームを開いたり閉じたりする処理を考えます。例えば、ボタンクリックを非同期処理で行い、その別スレ…

ポリモーフィズム(デリゲート)

デリゲート使用の説明①共通処理の場面で以下のコードを最後に紹介しましたが、実はこのコードには続きがあります。前回紹介したコードは以下の通り。 private delegate void testDlgt(); private void button1_Click(object sender, EventArgs e) { testDlgt…

デリゲートの使いどころ ②(保留)

デリゲートの使いどころとして、前回は共通処理をまとめる話をしました。 今回は2つ目「保留」です。プログラミングを構築していると、長いコードの中でどうしても「クラスの宣言」と「メソッドの実行」を分けて行いたい(タイミングが異なる)場面が結構あ…

Visual Studio 2019 プレビュー版

昨年12月にVisual Studio 2019 プレビュー版が公開されましたが、2月22日に宣伝があったので少し使ってみました。 基本的にVisual Studio 2017と共存可能のようです。devblogs.microsoft.comリファクタリング機能がかなり強化されていたり、アラートの…

継承(フォームの継承)

前回はクラスの継承について説明しましたが、フォームもクラスなわけなので継承可能です。ただ、コードを継承する場合と違い、コントロールを継承する場合は少しひと手間必要です。 継承するフォームの宣言 継承するフォームをコード上に宣言しますが、C#とV…

マスターページのメンバーへアクセス

コンテンツページからマスターページの公開メンバーへのアクセス方法です。 まずコンテンツページの.aspxファイル側にMasterTypeディレクティブを設定します。 <%@ Page masterPageFile="~/Site.master" ~~~~ %> <%@ MasterType VirtualPath="~/Site.mas…

マジックナンバーはシンボリック定数に置き換える

課題 以下のコードのどこが問題でしょうか。 string[] colorNames = {"桃", "黒", "黄", "青", "赤" }; for (int i = 2; i <= colorNames.Length - 1; i++) { Console.WriteLine(colorNames[i]); } Dim colorNames As String() = {"桃", "黒", "黄", "青", "…

不良セクタ

仕事場にて、「最近動作が遅くて困っている」との問い合わせがありました。ディスクアクセスがシーケンシャルでは出ているがランダムが全くでていない状況です。 確かにランダムIOが少し遅い気もします。 通常5400rpmだと1.0~1.2MB/s、7200rpmでも1.5MB/s前…

デリゲートの使いどころ ①(共通処理)

デリゲートは作成するアプリケーションの性質によっては全くお目にかからない(使う必要にならない)機能ですので、イマイチ使いどころが分からないかもしれません。そこで、デリゲートの恩恵が受けられる場面を3回に渡って説明しようと思います。 共通処理…

ローカルアカウントのパスワードを忘れた場合の対処法

Windows7以降でローカルアカウントを忘れた場合の対処法です。 Administratorで入れるかどうかを確認 これを読んでいるということは、パソコン管理者のはずなのでAdministratorでログインできるかどうかを試みます。なお、Administratorが無効化されている場…

複数のコントロールに同じイベントを割り当てる

フォームアプリケーションで、複数のコントロールに一つの同じイベントを割り当てる方法です。共通処理イベントを作成します。第一引数を「sender(object型)」、第二引数を「e(EventArgs型)」とします。例えばボタンクリックの共通処理イベントを作成し…

複数のusingステートメント

複数のusingステートメントを利用する場合、構造化が複雑になり過ぎてしまいますが、usingを重ねて書くことによりこれを防ぐことができます。 using (Class1 test1 = new Class1()) using (Class2 test2 = new Class2()){ ~ } Using test1 As New Class1, t…

デリゲート(匿名メソッドとラムダ式の利用)

前回、デリゲートの基本的な使い方であるメソッドを型のような形で保持させ使う話をしました。 デリゲートは他にも匿名メソッドやラムダ式でそのまま使う事が可能です。 匿名メソッドを利用 //デリゲートの宣言 delegate void ShowWriter(string value); //…