C#

C#の自動実装のイベントは解放されるのか?

C#

C#では、プロパティのイベント版ともいえる「自動実装イベント」を以下のように宣言することができます。 public event Action EventAction; 上述のコードですが、イベントを登録した事によって親オブジェクトもしくは子オブジェクトが破棄されないのでは?…

メンバーに構造体配列(のポインタ)を持つ構造体のマーシャリング

C#の相互運用(ネイティブDLLの呼び出し)で構造体の中に構造体配列(のポインタ)を持つ関数のマーシャリングのやり方です。 ネイティブDLL側の宣言 ネイティブのDLL側の宣言は以下のようになっているとします。 // Sample.h // 外部に公開する関数 extern …

C#の自動で作成されたイベントハンドラの命名規則

C#

イベントハンドラを自動生成した時に、以下のメッセージで注意を受ける事があります。 IDE1006 C# 名前指定の規則違反: 最初の単語 '${メソッド名}' は、小文字で始まらなければなりません IDEが自動で作ったコードをこちらに修正しろというのもいちょっとよ…

拡張メソッドを使ってObjectクラスを拡張しstringプロパティを一括でEmptyに初期化する。

C#

以前に、ブログで書いた「C#でstringを一括でEmptyに初期化する」という記事でstringのプロパティに対して一括でstring.Emptyを設定する方法を紹介しましたが、今回は拡張メソッドを使用してObjectoクラスを拡張してstringクラスへ初期値として任意の値を設…

C# + OpenCvSharpで画像を回転してリサイズする

タイトルの通り、OpenCvSharp(ver.3.x系)を使って画像を左右に90度倒した後、画像をリサイズして、はみだした状態や黒部分が無い状態にします。 回転だけすると以下のように意図しない状態や黒い帯が出て微妙に調整が必要だったりします。 ↓これが元画像 …

C#の最新版(C#7.3などを)を使用する方法

2018年6月2日現在、VisualStudioの.NETのC#プロジェクトでC#7.3などの最新のC#規格を利用可能にする方法を紹介したいと思います。(何故か、C#7.0までの構文しか使えず調べるのに手間取ってしまったのでやり方のメモとなります。) C#のバージョンの選択方法…

C#でFizzBuzzを実装する

FizzBuzzの問題の解法は出尽くしていると思いますが、自分でコードを書いた事が無かったためチャレンジしてみようと思います。 作成環境はVS2017(15.7.2) + .NET4.7.2 (≒C#7.2)です。 ルール確認と模範解答 まずはルールの確認です。概ね以下の通りです。 最…

C# + OpenCvSharp + WFP で Webカメラ画像を表示する

C#で利用できるOpenCVのラッパーライブラリの「OpenCvSharp」を使ってWebカメラで撮影した画像をWPFに表示したいと思います。 OpenCVを使用すれば数行で実現できるのでとっても簡単に実装できます。 今回使用するOpenCvSharpはバージョンが、3.4.1.20180319…

C#びDictionaryで自作オブジェクトをキー:TKeyに使用する

C#のDictionaryのTKeyにオブジェクトを指定した場合、参照アドレスが同じであれば同じオブジェクトと判断されます。これはオブジェクト同士の比較で a == b が true となる場合、同じキーと認識されることを表します。 今回は、自作のクラスの内容が同じ場合…

WPFで未処理の例外を一括で処理する

WPFで例外が処理されずに最上位のベントハンドラから例外がthrowされた場合、アプリがクラッシュします。 アプリがクラッシュすると、以下のような、OSのアプリのクラッシュレポートダイアログが表示され、以上が発生したことがユーザーに通知されます。 こ…

C#で簡単なファイル操作を行う

C#

C#でファイル操作するときはStream系のクラスを使用します。どんなに小さいファイルであってもたいてい以下のようなコードになるのですが若干記述量が多いのが気になります。 public static void Main(string[] args) { using(var sr = new StreamReader(@"h…

C#の三項演算子をリファクタリングする

C#で三項演算子って使ってますか? タイトルの件ですが、条件判定で、三項演算子を使った以下のようなコート見たことありませんか? public void SelectString(string text) { // text の中身が "animal" だったら0を返す。そうでい場合1を返す int index = …

C#のDictionaryをソートする3つの方法

C#

C#でDictionaryの内容をソートする方法を3つ紹介したいと思います。 前提条件 説明に使用するデータ構造は下の通りです。 // 必要な宣言 using System.Collections.Generic; using System.Linq; // 値に使用するクラス public class Item { // プロパティ pu…

C#で構造体のunion(共用体)を扱う

C/C++にあるunionをC#で使用する方法は、ネットにいくつか解説しているサイトがあります。しかし、構造体がunionになったものは例があまりないため紹介したいと思います。 基本的に、StructLayout = "LayoutKind.Explicit"(明示的にレイアウトを指定する)…

C#でリトルエンディアンをビッグエンディアンに変換する

タイトルの通り変換をするための操作の紹介をしたいと思います。 まず、誤解を恐れずに言うと、ネットワークにデータを流すときは「ビッグエンディアン」形式、いつも使ってるPCは「リトルエンディアン」形式が使われています。 更に、ネットワーク上にデー…

WPF + OpenCVSharpで画像の表示と切り出しを行う

タイトルの通り、OpenCVSharpを使用して画像の読み取りと、画像の部分的な切り出しを行います。 パッケージと導入方法 今回使用するのはWPFで利用性の高い以下のパッケージを使用します。 github.com VisualStudio上でパッケージマネージャを開いて以下を入…

プリコネRはキャラコンプにいくら必要か検証してみた

タイトルの通り正式タイトル「プリンセスコネクト!Re:Dive」は、一体いくらお金を払えば登場するキャラクター全員をコンプリートできるのでしょうか?さすがに、実際にお金を払って体当たりで確認する訳にいかないため、検証用のプログラムを作成し、シミュ…

サインカーブを使って雪を降らせるデモ

前回までの、X-Y座標系と円座標系の学習の一環として、サインカーブを使って雪を降らせるデモを実装してみました。 『JavaScriptゲームプログラミング 知っておきたい数学と物理の基本』から、第2章 基礎編-2 三角関数、2-2 サインカーブを使ったサンプルの…

C#でフラグ扱いの変数名にフラグと命名してはいけない

若干、揚げ足取りなのかもしれませんが、このような記事がQiitaに上がっていた上がっていました。 qiita.com で、フラグ的なbool型の変数にフラグって名前を付けちゃうと脳に負担がかかるからやめようという話です。記事では評価方法の話題ですがここでは変…

C#でインターフェースをDisposeする

C#

C#で引数をインターフェースで受けた時に実際の具象クラスがIDsiposabeを継承していてそれをDisposeしたいときの方法です。継承階層は以下の通りで青いIDatabseで変数を受けた時の話になります。 コードにすると以下のような状態です。 // コード例 public c…

C#で(a ==1 && a== 2 && a==3)」の結果を真にする方法

C#

先ほどはてブで、JavaScriptで「(a ==1 && a== 2 && a==3)」の結果を真にする手法が議論されるという記事を見かけたのでC#で同様の結果を得るためにはどうすればいいのか考えてみまました。 この問題、左辺の「a」の型が明示されていないことを利用してC#で…

WPFでボタンにホバーエフェクトをかける

WFPのボタンコントロールにホバーエフェクトをかけたいと思います。 マウスオーバーするとボタンの色が変わります。完成すると以下のようなイメージになります。GIFにすると画質悪い… XAML メイン画面のXAMLは以下の通りです。

C#で最大容量つきリングバッファーを実装する

C#

リングバッファーは、FIFO(ファーストIN, ファーストOUT)つまり先に入れたものが、取り出すときは先に出ていく、Queueと同じような構造を持っています。 リングバッファーって自分のイメージでは、有限のサイズのリングの大きさ(つまり入れられる最大の量…

ASP.NET Core を Windowsサービス化する

今回の記事、果たしてこんな事して意味があるのか不明です。 ただ、コンシューマ向けのWindowsに搭載のIISはExpress版なので多少制限があってそれを、ASP.NET CoreのKestrelを使って回避しようとした時に、Window上でサービス化してみたのでその手順をまとめ…

WPFのボタンの角を丸くする

前回の「WPFのボタンをフラットデザインに変更する」で表示したボタンは角が四角かったのですが、今回は丸く表示してみようと思います。 といっても大した事はなくて、前回のコードのContentTemplateの子要素のBorderにCornerRadiusを追加するだけです。 見…

WPFのボタンをフラットデザインに変更する

WPFのボタンのスタイルをデフォルトのスタイルから変更して境界線のないフラットデザインへ変更します。 デフォルトのボタンコントロールを表示すると 見た目がダサい(特にwindows7で) Win7とWin10で見た目が著しく異なる マウスオーバーしたときに青くな…

C#でZipファイルを解凍・圧縮する

C#

C#でZipファイルを扱う方法を紹介したいと思います。この機能は、結構最近追加されたため.NET4.5以上で利用可能です。 簡単なファイル解凍・圧縮 ファイルの解凍 ファイルの圧縮 複雑なアーカイブ操作 アーカイブ内のファイルを列挙する アーカイブから1つだ…

VisualStudio 2017で.NET Framework4.7.1を利用可能にする

Visual Studio 2017に.NET4.7.1を追加する方法です。いつも、MSのWebサイトへ飛んで開発者キットをダウンロード → インストーラを起動し導入していましたが、今回は2017から新しく追加されているVS用のインストーラを使って追加する方法で導入したいと思いま…

WPFでクリック時に波紋を出すエフェクト(Ripple Effect)を実装する

Androidのマテリアルデザインに、ボタンを押すと波紋が広がったようなアニメーションをする、Ripple Effectというものがあります。 WPFでも同じようなことができないかカスタムコントロールを作成してみました。 動いているところ 実際に表示を行うと以下の…

内部でStaticな変数に依存しない

アンチパターンのひとつで、処理がStaticなメンバーへ依存してはいけないというものがあります。 大したことはないのですが。例えば以下のようにstaticな、ある種のグローバル変数があったとします。 public class GlobalValiables { public static bool Int…