タグ

c#に関するindicationのブックマーク (69)

  • 【C#】構造体(struct)を完全に理解する - Annulus Games

    今回の記事はC#における構造体(struct)について。 複合的なデータを扱う際、多くの場面ではクラス(class)が用いられるかと思います。しかし、パフォーマンスが重要な場面や、GCによる影響が大きいUnityなどでは、状況に応じてクラスではなく構造体を使用した方が良いこともあります。 近年はC#においてもパフォーマンスが重視されるようになり、構造体が用いられる機会も多くなっています。またUnityのDOTSにおいても、C# Job SystemやBurst Compilerに最適化されたコードを書くために構造体を多用することになります。 ここでは構造体に関する基礎的な知識から、クラスと構造体のメモリ管理について、そして実際に構造体を用いる際の注意や活用方法についても解説していきたいと思います。 ただ今回の記事、調子に乗って色々な内容を詰め込んだ結果、めちゃくちゃに長くなってます。そのた

    indication
    indication 2023/08/12
    readonly structなんてあったのか。知らなかった
  • 「DI使うとインタフェース地獄に陥るらしいから使いたくない」と言っていたA氏がインタフェースを使わずにDIで幸せになるまで - Qiita

    「DI使うとインタフェース地獄に陥るらしいから使いたくない」と言っていたA氏がインタフェースを使わずにDIで幸せになるまでC#DIDependencyInjection依存性の注入 DIはインタフェース定義しなくても十分実用的だし、むしろそっちの方が質だよ、という話をします。C#や.NETを使っていますが、それに限らず普遍的な内容です。 インタフェースと実装に分けるとか無理。DIなど不要! 中堅社員のA氏は、「DIっていちいち実装とインタフェース分けないとダメなんでしょ?。さすがにやってられんわ」と言って頑なにDIを導入しようとしません。 DIはテスタビリティと併せて語られることが多かった為か、A氏は「注入するクラスは基的にインタフェース定義しましょう」という記事ばかりを読んでいたのです。 インタフェースと実装を分けるとは、例えば次のような事です。 services.AddScoped

    「DI使うとインタフェース地獄に陥るらしいから使いたくない」と言っていたA氏がインタフェースを使わずにDIで幸せになるまで - Qiita
    indication
    indication 2021/10/21
    アセンブリスキャンしてどこからともなくインスタンス取ってくるのは好きだけど、周りから理解を得れない。特定のライブラリと依存関係にあるとき、本体から切り離せるんだけど、そんなユースケースはないのかな…。
  • C#スクリプト実行

    C#をスクリプト言語的に実行したり、インタラクティブ実行したりできるようになりました。 その実行方法や、通常の(コンパイルして使う)C#にはないスクリプト専用機能などについて説明します。 概要 いくつかの実行形態 アプリへの組み込み スクリプトとアプリとのやり取り C# インタラクティブ ウィンドウ dotnetコマンド スクリプト実行用の構文 結果の出力 トップ レベル スクリプト用ディレクティブ 概要 2015年末頃、ついにC#をスクリプト言語的に実行したり、インタラクティブに実行したりできるようになりました。すなわち、以下のようなことができるようになりました。 アプリへの組み込み アプリに組み込んで、そのアプリ用のマクロ言語としてC#を使う アプリを実行したままC#スクリプトを読み直して、動的にアプリの挙動を変える REPL(Read Eval Print Loop)実行 1行1行、

    C#スクリプト実行
    indication
    indication 2021/09/02
    oh....csc使って一時的にコードを構築してdll作って自分にロードかけて、プロセス監視して、プロセス終了で作ったdllを破棄してたのがウソみたいだorz、2015年にやってたから、なるほど。進化か。
  • await って言う単語

    C# 5.0で非同期メソッドが導入されてから、 正式リリースを基準にしても5年以上、 最初の発表からだと7年以上経っています。 で、5年経っても、「なんて読むの」「asyncのaとawaitのaは違う」などなどが「定番ネタ」として定期的に出てくるわけですが。 特に、ECMAScript 2017がasync/awaitを導入したり、 Unity 2017がやっとC#のバージョンを6.0に上げれる感じになってきたり、 5年の断絶を経て去年からasync/awaitに触れる人が増えているようです。 5年も離れたら、世代断絶も起こりますよね… そりゃ、「定番ネタ」が改めて増えもしますよね… ということで、5年くらい前に同じようなことをどこかで書いてるはずなんですけど、改めて。 英単語 えいしんく まず読み方。 async: エイシンク await : アウェイト ってやつ。async の方が「ア

    await って言う単語
    indication
    indication 2020/12/13
    async、awaitの発祥秘話。読み方間違ってた…mavenに続いてショックを受けてる。BlockingCollectionをAsync対応にしてくれないかな
  • 【C#】null許容値型のnonnull判定どれが早いかクイズ - dely Tech Blog

    どうもC#erの@MeilCliです。仕事ではAndroidエンジニアをしていますがC#erなのでアドベントカレンダーではC#について書きます 今回参加しているアドベントカレンダーはこちらです。3日目の記事になります adventar.org あと、同様なカレンダーがもう一つあります adventar.org 問: どれが早いか int? n = 0; if (n.HasValue) {}// ① if (n is int) {}// ② if (n is int and int) {}// ③ if (n is not null) {}// ④ ※ Roslyn master(25 Nov 2020)時点 正解はこの記事の中盤に書いています n.HasValueとはなんぞや C#erではない人向けに解説すると、C#のnull許容型は2種類(null許容参照型・null許容値型)が存在しま

    【C#】null許容値型のnonnull判定どれが早いかクイズ - dely Tech Blog
    indication
    indication 2020/12/04
    !=nullも同じなのだろうか
  • .NET 5 を使いたい理由6選 - Qiita

    速いので使いたい 私の場合、ここ数か月で一番素晴らしいニュースだと感じたブログがこれでした。 https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-5/ .NET5 がどれだけパフォーマンス向上のために努力してきたかという内容です。 ものすごいボリュームで読むのが大変でしたが、満足感のある記事でした。 この記事を読んだだけでも、早く.NET 5 を使いたいという気持ちになりました。 パフォーマンスが良くなったという知らせはいつでもエンジニアの気持ちを高揚させるのだと思います。 使いたい理由1 : GCが高速化した いくつものアプローチを重ねたことが記されていました。 GCが到達可能オブジェクトをマークする処理の情報を他のスレッドでも流用できるようにして、各スレッド内の同処理の作業量を一部省略可能にした G

    .NET 5 を使いたい理由6選 - Qiita
    indication
    indication 2020/11/28
    5ではネットワーク関連の機能向上がスゴいという噂があるから是非試したい。気が向いたら何かを試したい
  • 【WPF】C#でjpgのExif情報を読み込む - Qiita

    概要 C#(WPF)で、jpg画像の中のEXIF情報を取り出し/書き込みする。 読み書きには、BitmapMetadataクラスのGetQuery/SetQueryを使用する。 読み出し 流れは下記のようにする。 ファイルパスからBitmapFrameクラスのインスタンスを作成(画像を読み込み)。 BitmapMetadataクラスで、EXIF情報を含むMetadataを取り出し。 取り出したMetadataから、GetQueryメソッドを使って必要なデータを取り出す。 具体的には、下記のようにする。 // ファイル/Metadata読み込み Uri uri = new Uri(tb_FileName.Text, UriKind.Absolute); BitmapFrame frame = BitmapFrame.Create(uri); BitmapMetadata metadata =

    【WPF】C#でjpgのExif情報を読み込む - Qiita
  • C# で、同じソースコードから常に同じバイナリを生成する

    昔、gist にだけ置いてて、そういえばブログに書いてなかったものを思い出したので書いておくことに。 (一応、部分的には言及したことがあるんですけど、ちゃんとした話はしたことがなかったはず。) 決定論的ビルド 3年くらい前まで、C# コードをコンパイルすると、ソースコードを一切書き換えていなくても、生成結果の exe/dll や pdb のバイナリが変化していました(決定性(deteminism)がない)。 原因は以下の2つです。 バイナリ中に埋め込まれる GUID にタイムスタンプと乱数から生成される値を使っていた デバッグ用のファイル情報がフルパスで埋め込まれていた GUID の方はタイムスタンプと乱数なので当に致命的で、ローカルで再コンパイルしても毎回バイナリが変化していました。 フルパスの方は基的には pdb (デバッグ用シンボル情報)だけの問題なんですが、 exe/dll で

    C# で、同じソースコードから常に同じバイナリを生成する
    indication
    indication 2019/05/24
    これ、これを知りたかった!なんで公式のdllパスはファイル名だけなのか、謎がついに!!バイナリ同一性確認のためにバイナリ99%一致チェックとかやってた
  • C#リフレクションTIPS 55連発 - Qiita

    タイトルの通り、C#のリフレクションのTIPS集です。 これから示すコードは、以下のusingディレクティブが前提のコードとなってます。 using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Reflection; 普段はvarキーワードをよく使ってますが、ここでは変数の型がわかるようにvarキーワードの利用はできるだけ控えています。 それと、いくつかのコードはdynamic使ったほうが簡単に書ける場合もありますが、あくまでもリフレクションのサンプルということでご容赦を。 1. 型名から型情報を得る

    C#リフレクションTIPS 55連発 - Qiita
    indication
    indication 2018/12/19
    ジェネリクスを動的にインスタンス生成するとか、ジェネリクスメソッドを呼び出すとか魔力を使う話はなかった
  • 引数の型を何でも List にしちゃう奴にそろそろ一言いっておくか - Qiita

    この記事は C# その2 Advent Calendar 2018 の第一日の記事である。 はじめに この記事では、主にエンタープライズアプリケーション(SI、企業向けの業務システムやパッケージ製品)の開発に於いて、新規開発ではなく修正や拡張を行うようなシーンを想定して、無駄な工数をなるべく削減すべく自分なりに考えて実践しているベストプラクティスを書いている。 新規開発の場合でも、将来の拡張や修正が見込まれるはずなので、考慮すべき事は同じだ。 競技プログラミングや、組み込み開発の場合でも基的な考え方は適用可能だが、メモリ効率やパフォーマンスを考慮する必要もあるので、あえて配列を使ったり、逸脱するようなケースもあるだろう。 対象とする読者層は、C#プログラミング歴1年以上、SIer やユーザー企業に所属(もしくは常駐)し、特に複数人チームでの開発に携わる若手プログラマ、初級から中級へのステ

    引数の型を何でも List にしちゃう奴にそろそろ一言いっておくか - Qiita
    indication
    indication 2018/12/02
    MergeAndUniqueだったら、linqの出番だね(無関係)。paramsを使おうって話じゃなかった
  • プラットフォーム呼び出しによるデータのマーシャリング - .NET Framework

    Visual Basic、C#、および C++ での対応する型については、「.NET Framework クラス ライブラリの概要」を参照してください。 PinvokeLib.dll 次のコードでは、Pinvoke.dll によって提供されるライブラリ関数を定義します。 このセクションで説明される多くのサンプルでは、このライブラリを呼び出します。 例 // PInvokeLib.cpp : Defines the entry point for the DLL application. // #define PINVOKELIB_EXPORTS #include "PInvokeLib.h" #include <strsafe.h> #include <objbase.h> #include <stdio.h> #pragma comment(lib,"ole32.lib") BOOL A

    プラットフォーム呼び出しによるデータのマーシャリング - .NET Framework
    indication
    indication 2017/12/16
    ネイティブ呼び出し
  • thisを書く派?書かない派? - Qiita

    あすかです。 プログラミングしてる時、たまに気になる話を雑めに書いてみます。 (´・ω・`) C#、VBやJavaなど、クラスベースのオブジェクト指向言語を前提にした話ですが、this(Me)を書いているプログラム、そうでないプログラムをよく見かけます。 例えば、thisを書くのは このような場面ではthisを書きます。文法上の制約ですから当たり前です。 今回は、このようなものではなく、thisを書かなくてもいい場面の話です。 thisを書くメリット ちなみに私はthisを書く派です。 というのも、後でコードを読み返す時に、ローカル変数とフィールド変数の区別が一発で付くからです。 VSはthisを色分けしてくれますよね。 けっこう地味かもしれませんが、長いクラス(といっても500行を超えるようなクラスはめったに書きませんが)の一部分だけを読む時に、thisの存在はかなり役に立ちます。 他の

    thisを書く派?書かない派? - Qiita
    indication
    indication 2017/10/14
    メンバ変数は_始まりで、プロパティは大文字始まり、内部変数は小文字始まりで統一してるから、さほど困った記憶はない。他の人は困ってるのかな?内部からのプロパティ呼出は積極的でいいのかな?どうなんだろ。
  • 【Unite 2017 Tokyo】「黒騎士と白の魔王」にみるC#で統一したサーバー/クライアント開発と現実的なUniRx使いこなし術

    講演者:河合 宜文(株式会社グラニ) こんな人におすすめ ・C#大統一理論について興味のある方 ・UniRxを使ったことがある/使ってみたい方 受講者が得られる知見 ・C#で統一したプロジェクトの作り方 ・UniRxの活用法、メリットとデメリット 講演動画:https://youtu.be/Lvbs22iZFPk

    【Unite 2017 Tokyo】「黒騎士と白の魔王」にみるC#で統一したサーバー/クライアント開発と現実的なUniRx使いこなし術
    indication
    indication 2017/05/08
    wcfの相互運用とか話にならなかったのかな?ひとつのプロジェクトがでかそう
  • C#のswitch文のコンパイラ最適化について - Grani Engineering Blog

    CTOの河合(@neuecc)です。グラニもエンジニアブログはじめました!グラニの中心的テクノロジーであるC#関連は元より、Unity関連やUniRx、最近力を入れているVR関連についての情報を色々と発信していけたらと思っています。私自身は、思いたったときが書き時ということで、私が社内にふっと流したくなったものを、外向けに発信していこうかな、と思っています。 さて、今回のテーマはswitch文のコンパイル結果について。C#は割と素直なコンパイル結果(ILへの変換)を得られるのですが、一部のものはアグレッシブな変換を行います。有名所ではラムダ式のクロージャなどは、隠れたクラスを作ってくれる、作ってしまうなど、コードの見た目からイメージした通りではない結果を出力しますが、実はswitch文もかなりアグレッシブな変換を行います。そこで、今回はそうしたswitchの最適化を見ていきましょう。 なお

    C#のswitch文のコンパイラ最適化について - Grani Engineering Blog
    indication
    indication 2017/02/20
    string.Equalsとかも、コンパイル時に埋め込まれるって知ったときの衝撃
  • Vector3 構造体 (System.Numerics)

    名前空間: System.Numerics アセンブリ:System.Numerics.dll, System.Numerics.Vectors.dll アセンブリ:System.Numerics.Vectors.dll アセンブリ:System.Numerics.dll アセンブリ:netstandard.dll Source:Vector3.cs Source:Vector3.cs Source:Vector3.cs 重要 一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。 public value class Vector3 : IEquatable<System::Numerics::Vector3>, IFormattable publ

    Vector3 構造体 (System.Numerics)
    indication
    indication 2016/12/23
    内積とか外積を自前で実装していた時間を返せと言いたくなるほどすさまじい機能を持ってる。ハードウェアアクセラレーションとか
  • BigInteger 構造体 (System.Numerics)

    名前空間: System.Numerics アセンブリ:System.Runtime.Numerics.dll アセンブリ:System.Numerics.dll アセンブリ:netstandard.dll 重要 一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。 public value class BigInteger : IComparable, IComparable<System::Numerics::BigInteger>, IEquatable<System::Numerics::BigInteger>, IFormattable public value class BigInteger : IComparable, ICompa

    BigInteger 構造体 (System.Numerics)
    indication
    indication 2016/12/23
    これでおっきな○○が扱える
  • C#でマルチスレッドのベストプラクティスって何かある?(What are the best practices with multithreading in C#?) - Qiita

    C#でマルチスレッドのベストプラクティスって何かある?(What are the best practices with multithreading in C#?)C#非同期処理StackOverflowマルチスレッド翻訳 StackExchange/Code Reviewでの質問"Exporting doc types using queues and multithreading"へのEric Lippert氏による回答より訳出。回答内容はオリジナル投稿"What are the best practices with multithreading in C#?"に呼応するため、編集前のタイトルを採用。原文および訳文のライセンスは引用元サイト規約の通り CC-BY-SA 3.0 に従う。 (補足:回答内容のトーンに合わせて口語調かつ意訳気味に訳出しました。誤訳指摘および訳出改善は歓迎

    C#でマルチスレッドのベストプラクティスって何かある?(What are the best practices with multithreading in C#?) - Qiita
    indication
    indication 2016/08/17
    concurrent 使うとdisposeの配慮が面倒でかなわない。遅い処理があって、進捗率定期的に表示する良い例がほしい
  • わたしが C# を学ぶにあたって教わっている先達のサイトをまとめてみる - tech.guitarrapc.cóm

    書いていないネタは多いのですが、アンケートで C# についてと言われました。 次なんの記事がいいですか? #書く記事募集中— guitarrapc_tech (@guitarrapc_tech) April 23, 2016 そこで、私自身 C# を学ぶにあたって参考にしているものをまとめておくことことにします。*1 はじめに感謝と尊敬を。ここに載せていないサイト、書籍の多くからも学びも得ています。今現在もそうです。 私自身が何か恩返しをできればと思いつつ、同じように悩まれている方への参考となれば幸いです。 目次 目次 個人ブログ Microsoft関連 困ったときの まとめ 個人ブログ 順番には大きな意味はありません。 サイト ブログ主 参考にしている分野 備考 ++C++; // 未確認飛行 C ++C++; // 管理人: 岩永 (@ufcpp) / Twitter C#, プログラ

    わたしが C# を学ぶにあたって教わっている先達のサイトをまとめてみる - tech.guitarrapc.cóm
  • CodeIQについてのお知らせ

    2018年4月25日をもちまして、 『CodeIQ』のプログラミング腕試しサービス、年収確約スカウトサービスは、 ITエンジニアのための年収確約スカウトサービス『moffers by CodeIQ』https://moffers.jp/ へ一化いたしました。 これまで多くのITエンジニアの方に『CodeIQ』をご利用いただきまして、 改めて心より深く御礼申し上げます。 また、エンジニアのためのWebマガジン「CodeIQ MAGAZINE」は、 リクナビNEXTジャーナル( https://next.rikunabi.com/journal/ )に一部の記事の移行を予定しております。 今後は『moffers by CodeIQ』にて、 ITエンジニアの皆様のより良い転職をサポートするために、より一層努めてまいりますので、 引き続きご愛顧のほど何卒よろしくお願い申し上げます。 また、Cod

    CodeIQについてのお知らせ
    indication
    indication 2016/04/15
    フリガナをありがとう
  • 二つの AppDomain の狭間で - I wish we human would be gatekeepers of CLR... -

    もっと境界を自由に行き来できるようになりたい! .NET Framework を使われている方は、もしかしたら聞いたことがあるかもしれない機能、AppDomain。 MSDN では「アプリケーションを分離する利点」として次のような説明がされています。 あるアプリケーションで実行されているコードは、他のアプリケーションのコードに直接アクセスできないよ。 あるアプリケーションで発生したエラーが他のアプリケーションに影響することはないよ。 プロセス全体を停止せずに、各アプリケーションを停止できるよ。 コードの構成情報(読み込むアセンブリのバージョンポリシーや場所)をアプリケーション毎に決められるよ。 コードに与えるアクセス許可をアプリケーション毎に制御できるよ。 プロセスに比べ、その生成コストや相互通信コストが低いため、サーバーに利用すればそのスケーラビリティは飛躍的に向上し、セキュリティレベル

    二つの AppDomain の狭間で - I wish we human would be gatekeepers of CLR... -
    indication
    indication 2016/03/29
    appdomainに関する注意点