佐々木屋

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

定数表現は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…

Windows Defenderを無効化

何かと不便なWindows Defender。彼はよかれと思ってやっているのですが・・・。 レジストリより無効化が可能です。 //場所 SOFTWARE\Policies\Microsoft\Windows Defender //キー名 DisableAntiSpyware //値(DWORD) 0:有効 1:無効 ←これを設定

リファクタリングの判断

私がコードをチェックする時、「これは駄目なコードだ」とリファクタリングの対象とする点がいくつかあります。 今回はそれをまとめて紹介しますので、共感できる部分は是非修正してみて下さい。逆に共感できない部分は、何故それが駄目なのかを考えるのも面…

Option Strict Off は悪なのか?

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

文字列分割(Split)の挙動

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

IPアドレスを取得する

IISによるASP.NETでIPアドレスを取得する方法です。 System.Web名前空間のHttpContext.Current.Requestプロパティを利用します。 string ipAddress = HttpContext.Current.Request.UserHostAddress; //以下でも取得可能 ipAddress = System.Web.HttpContext.…

マスターページを含むページイベント処理の順番

マスターページを含む場合、マスターとコンテンツのInitとLoadの順番が逆になるので、何か共通処理をマスターページに処理させる場合はコンテンツの処理と間違えないように注意して下さい。 なお、今回はGlobal.asaxの処理は入れません。別の機会(ロギング…

ユーザーアカウントを起動時に表示させない

パソコンに登録されているユーザーアカウントを生かした状態でユーザー側に見えないようにすることができます。 内部的処理や管理者がリモートで使用するようなアカウントはこの設定をしておくと良いでしょう。 //場所 HKEY_LOCAL_MACHINE\SOFTWARE\Microsof…

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

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

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

フォームイベントの発生順番をまとめました。実務レベルで必要な部分は青字になりますので、そこだけ理解しておけば問題ありません。 起動時のイベント発生順番 順番 イベント 内容 1 Control.HandleCreated コントロールに対してハンドルが作成されると発生…

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

私はC#とVB.NETどちらでもプログラミング出来ますが、片方しか知らない方向けに違いをいくつか紹介していきたいと思います。 そもそも親戚?他人? C#とVB.NETはどちらもWindows系アプリケーション(ASP.NET)を作成できるプログラミングとして有名です。.NE…

json.net バージョン不整合によるアプリケーションのサーバーエラー

ASP.NETのNuGetエラーの続きです。 どうもCodeBehindでWEBアプリケーションを作成してディレクトリごとコピーしてWEBサイトを発行すると、以下のメッセージが表示されてうまくコンパイルされません。 ファイルまたはアセンブリ 'Newtonsoft.Json'またはその…

Dictionaryクラスのソート

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

ASP.NETプロジェクトで謎のビルドエラー

何がどうなってこうなった?のか分かりませんが、会社で作成したASP.NET開発物がビルド(当然リビルド、発行もNG)出来なくなって、少し途方に暮れた時の話です。 VisualStudioの更新を当てた後におかしくなった? でも問題ないプロジェクトもある ビルド…

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

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

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

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

Windows8以降の無線設定でWPA/TKIPを利用する方法

Windows7までは無線認証・暗号化方式でWPA/TKIPを利用できましたが、Windows8からセキュリティ上の問題からGUIの設定表示から削除されました。でも、無線APがWPA-PSK/TKIPの設定でOS混在で使用する場合はどうしてもWPA/TKIPを設定しなければなりません。今回…

非同期処理、マルチスレッド(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#の方は以下のエン…

ドメイン参加・離脱

ドメイン参加 実行後、ReturnValue=0となれば成功です。 または、別途ドメイン名を取得する方法があります(後述)。 #一行で書いて下さい wmic ComputerSystem WHERE name='%computername%' CALL JoinDomainOrWorkgroup Name="@ドメイン名" Username="@ドメ…

Windows 自動ログオンを設定

支店用PCなど、特定アカウントしか使用せず、且つログイン画面も省きたい場合は自動ログイン設定にします。 いくつか設定がありますが、キーの場所は以下で一緒です。 SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon ユーザー簡易切替(WIndowsXP…

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

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

string型は参照型

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

デバイスオートランの無効化

何かと便利なデバイスオートランですが、一昔前にUSBウイルスが蔓延した際にこの機能を無効にしました。 特定デバイスではなく、全てのデバイスに適用できます。 //場所 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer //…