佐々木屋

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

1.C#、VB.NET

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

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

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

フォームアプリケーションで、複数のコントロールに一つの同じイベントを割り当てる方法です。共通処理イベントを作成します。第一引数を「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); //…

TryParseメソッドのカンマ区切り挙動

TryParseメソッドは、数値ではなくカンマ区切りの数値を渡したときの挙動が型によって微妙に違います。よく使われるint、long、double、decimalで説明します。 int value; Console.WriteLine(int.TryParse("1,234", out value)); //false long value; Consol…

デリゲート(基本)

デリゲートを本やサイトを調べると、「委譲」であったり、「代表者」、はたまた「C言語の関数ポインタ」という難しい表現が出てきます。ちょっと分かりにくいですよね。そして大抵、読み進めると何が書いてあるか分からなくなるのがデリゲートです。実はデリ…

非同期処理、マルチスレッド(async/await)

非同期処理最終話です。.Net Framework4.0でTaskクラスが登場し、非同期処理がより簡単に書けるようになりましたが、.Net Framework4.5からTaskクラスをもっと使いやすくしたasync/awaitが登場します。 非同期処理はThreadから始まり、Timerスレッドやデリ…

継承(クラスの継承)

継承にはクラス、Windowsフォーム、WEBフォームと大きく分けて3種類あります。今回はクラスの継承のお話しです。継承の中でも一番基礎的な部分となります。VB6出身の方だと聞きなれない言葉「継承」ですが、簡単に言えば「コピーを使いまわす」といったとこ…

定数表現はconst?readonly?

シンボリック定数などの定数を宣言する場合、二通りの方法があります。 static readonly(VB.NETはReadOnly) const どちらも定数表現としてよく使われますが、明確な違いは以下の通りです。 項目 static readonly(ReadOnly) const 宣言 クラスメンバーの…

遅延バインディング

バインディング(型を結びつけること)には事前バインディングと遅延バインディングの2種類あります。これもC#とVB.NETで微妙に動作(というかお作法)が違います。はじめに事前バインディングと遅延バインディングの違いを簡単に説明します。読んで字のご…

.NET FrameworkとC#、VB.NETのバージョン対応表

どうしても.NET FrameworkとC#、VB.NETのバージョン一覧をド忘れます。 完全に自分用です。すぐ閲覧できるようにまとめました。 .NET Framework C# VB.NET 主な追加機能 2.03.0 C# 2.0 VB 8 匿名メソッド(C#)staticクラス(C#)ジェネリックnull 許容型yie…

VB.NETでブロック文を作成したい

C#には構造文を作る区切り文字「{ }」があります。 { string hoge = "piyo"; Console.WriteLine(hoge); } { int hoge = 123; Console.WriteLine(hoge); } こんな感じで局所的に変数を作ったり、処理を分けたりするのにすごく便利なのです。お馴染みのforやIf…

Option Strict Off は悪なのか?

とある方からこんな質問。 「Option Strict Off は使うべきか」 私の判断は、「どちらでも良い」が正解です。 他のWEBや本を見ると、「On」にしないと駄目プラグラマやで~みたいな風潮で洗脳するように書かれていますが・・・。そもそも、「Option Stric…

文字列分割(Split)の挙動

C#とVB.NETでは文字列分割の挙動で若干の違いがあります。これはVB.NET初学者でもよく間違いますので、しっかり覚えておきましょう。 例えば、文字列「lowhogemiddlehogehighhogenone」を「hoge」で分割することを考えます。分割後を列挙した場合、以下のよ…

非同期処理、マルチスレッド(Task②戻り値、引数がある場合)

前回はTaskクラスの実行方法を説明しました。メソッドは戻り値、引数が無いvoidを例としていますが、戻り値や引数がある場合のメソッドをTaskに実行させることも可能です。なお、今回のコードはRunメソッドを採用します。Factory.StartNewメソッドでも書き方…

フォームイベントの発生順序

ランキング参加中プログラミングランキング参加中エンジニアグループフォームイベントの発生順番をまとめました。実務レベルで必要な部分は青字になりますので、そこだけ理解しておけば問題ありません。 起動時のイベント発生順番 順番 イベント 内容 1 Cont…

似ているようで違うC#とVB.NET

ランキング参加中プログラミングランキング参加中エンジニアグループ私はC#とVB.NETどちらでもプログラミング出来ますが、片方しか知らない方向けに違いをいくつか紹介していきたいと思います。 そもそも親戚?他人? C#とVB.NETはどちらもWindows系アプリケ…

Dictionaryクラスのソート

ジェネリックコレクションの一つであるDictionaryクラスのソート方法です。 Dictionaryクラスも配列なので、できる方法がたくさんありすぎて困るくらいです。ここでは私がよく使う3つの手法を紹介します。この方法以外でもいっぱいあるので、是非チャレンジ…

フォームの表示切替(補足)

前回メインフォームの表示切替の話をしましたが、少し説明というかイメージが足りませんでしたので補足します。 sasaki816.hatenablog.com ここで説明されたメインフォームの入替で、ApplicationContextクラスのMainFormプロパティに設定したフォームがアプ…

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

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

非同期処理、マルチスレッド(Task①基本)

ThreadPoolの概念を引き継ぎ、より改良された非同期処理クラスとして .NET Framework4.0以降に登場したのがTaskクラスです。 Taskクラスはスレッドプールを利用しますが、生成・管理は全てクラス側が勝手にやってくれますので、特に意識する必要はありません…

フォームの表示切替

フォームの表示方法でShowDialog(Show)メソッドによって実現していますが、Form1を閉じてForm2を開くような画面変遷を兼ねている場合、呼び出し元であるForm1を閉じずにHideメソッドで隠しておく必要があります。 Form2 f = new Form2(); f.Show(); this.H…

フォームの表示方法

フォーム表示方法は2種類あり、モーダル(他フォームが操作不能)かモードレス(他フォームも操作可能)での表示となります。 2つの違いを簡単に言えば、インスタンスの破棄の必要有無と、その後の処理がどうなるのかということです。 モーダル(他フォー…

メッセージループ(Application.RunとForm.ShowDialog)

通常、エントリポイントで起動フォームを指定する場合、Application.Runメソッドを使用します。 Application.Runに指定されたフォームは表示されると、マウスやキーボードの操作を受け付けるために待機状態となります。そして操作が実行されると、その操作内…

エントリポイント

Windowsフォームアプリケーションを作成する場合、まずエントリポイントを作成します。 エントリポイントはアプリケーションが開始されたときに一番最初に実行されるコードで、フォームを開く前段階の前準備を行うことができる場所です。C#の方は以下のエン…

自分の作ったプログラムのメモリ使用量を知る

コスト調査であったり何かの実証実験で、自分のプログラムのメモリ使用量を知りたい場合は、System.EnvironmentクラスのWorkingSetプロパティを使用します。 byte単位なので、適当に変換して使用すればよいでしょう。 Console.WriteLine(System.Environment.…

string型は参照型

string型はプリミティブ型に分類されますが、参照型です。よく値型と勘違いされますが誰がなんと言おうと参照型です。 でも、何も考えず以下のようなコードを書くとどうでしょう。結果としては値型のような挙動になります。 string str1 = "Hoge"; string st…

値型と参照型

プログラミングを学習すると必ずやらなければならない、そしてよく分からない?値型と参照型の違いについて。このブログは初学者向けの教本では無く、初学者に説明した中でよく分かってもらえない・理解してもらえない分野のみを抜粋して記録するためのもの…

オペレーションシステムのビット数を取得

オペレーションシステムをビット数を取得する方法です。これ以外にも色々ありますが、現在はこの方法が一番楽に取得できます。 なお、表記はC#です。VB.NETでもほぼ同じなので省略します。 オペレーションシステムのビット数 オペレーションシステムのビット…

オペレーションシステムの情報を取得

System.Management名前空間のManagementClassクラスにWin32_OperatingSystemを渡すと、オペレーションシステムの情報が取得できます。 詳細は以下を参照して下さい。 Win32_OperatingSystem class - Windows applications | Microsoft Docs 基本的にオペレー…