ネコのために鐘は鳴る

寺院に住み着くパソコ〇好き

c#

(C#) string で発生するガベージを抑える (String Interning)

C# においてstringは参照型で、そのインスタンスはヒープメモリに生成されます。 当然、参照されなくなったstringは次回のガベージコレクションで回収されます。 少しでもガベージは減らしたいものですが、文字列は生成するたびに同じ内容でも別インスタンス…

(C#) 知らぬ間に起こるstructのboxingを回避する

この記事の要点 自分でobjectにキャストしなくてもboxingは起こるよ structは等価比較を実装しないとパフォーマンスが落ちますよー ボックス化 (boxing) とは C# には値型と参照型があり、structは値型です。値型のオブジェクトは参照型のメンバ変数である場…

(C#) 同期コンテキストと Task, async/await

.NET framework 4 で追加されたTaskおよび .NET framework 4.5 で追加されたasync, awaitキーワードによって、C# の非同期処理は非常にに簡単になりました。 Windows Form, WPF, UWP, Unity など各種フレームワーク上の場合、非同期処理はスレッドやコールバ…

(C#) コレクションのカプセル化

コレクションの保護 クラスの不十分なカプセル化としてよく見られるのがコレクションです。 以下の例は、カプセル化されていないコレクションの例です。 public static class Database { public static Person[] People { get; private set; } } public clas…

.NETとマルチプラットフォーム

C#でマルチプラットフォームなアプリケーションを作りたかった時に、調べたことを自分用メモとしてまとめました。 たまには違う言語も書いたら? C#の実行環境 C#はIL(中間言語;Intermediate Language)にコンパイルされ、仮想環境上で動くコンパイル系言語で…

(C#)Enumの要素に表示名をつける ~ローカライズ編~

前回の記事の続きです 前回はEnumDisplayName属性に定数リテラル文字列を与えることはできましたが、 リソースから値を割りつけることができませんでした。これでは多言語化する時に困ります。 [AttributeUsage(AttributeTargets.Field)] public class EnumD…

C#5でもnameofしたい

結論 前置きが長いと結論を早く知りたいマンにボコられるので、 まずはタイトルに対する結論から。 using System; using System.Linq.Expressions; public static class GetName { public static string Of<MemberType>(Expression<Func<MemberType>> expression) { return (expression.Bo</func<membertype></membertype>…

(C#) Enumの要素に表示名をつける

やりたいこと Enumのフィールド名と表示名を分離したい。 最終的な目標として、Sushi.Takoというenumを表示する文字として"タコ"を割り当てたい。かつ汎用性のある構造にしたい。多言語によるローカライズにも対応したい。今回はそういうお話です。 2019/2/2…

DependencyPropertyとBindingについて

DependencyPropertyとは何か WPFにおけるBindingの根幹をなす依存関係プロパティ(DependencyProperty)について書いておこうと思います。 まず、DependencyPropertyとは何かというと、一言で言うとBindingができるプロパティのことです。 より正確に言うと、B…

MVVMで始めるWPF生活

はじめに 皆さんはラーメンは何で食べますか?いえ、そうではなく、WPFとはいったい何でしょうか?正式にはWindows Presentation Foundationといい、Windows Formに代わる新しいWindowsにおけるGUIアプリケーションのプラットフォームであり、登場は2006年。…