本稿はコード設計に興味があるエンジニアを対象としています。
カテゴリー: C#
C#と.Net Frameworkに関する記事
【C#】その例外、使ってもいいけど使っちゃダメです
Sonar Lint を使わなければ気づかなかったシリーズ
Sonar Lint で警告を食らう度に記事を書いてる気がしますが、有用な情報なのでスルーしない方が良いと思います。
【.Net C#】Task をもっと手軽に使いたい
.Net には、マルチスレッドの処理を使いやすくした Task クラスがありますが、使いやすいとは言え、かなりの知見が必要になります。
System.Threading.Tasks 名前空間には、クラスだけでも以下の種類があります。
.Net 8.0 の System.Threading.Tasks 名前空間に含まれるクラスの一部
※タップまたはクリックすると大きい画像で表示します。
.Net のような、あらゆるシチュエーションで使えるように構成された API では、多種多様な機能を用意するのは正しいと思います。
ただ、スレッドプールの恩恵をつまみ食いしたいようなときには、学習コストが高すぎます。
そこで、学習コストをほとんど必要としないマルチスレッド用クラスを作りました。
古(いにしえ)の技術、固定少数点数とは?
少数を100倍とか10000倍とかして整数で扱う手法です。
浮動小数 3.14 ⇒ 固定少数 314
今のゲーム開発では使わなくなったんじゃないでしょうか。
正確には「固定少数点数」ですが、長いので「固定少数」と呼ぶことにします。
メリット
1.昔のハードウェアでは float や double より int の方が計算が速かった。
2.float や double 特有の誤差が出ない。
デメリット
1.int を float や double に変換するのが面倒。
2.速度の問題なら、今のハードウェアでは float か double で良い。
3.誤差の問題なら、誤差が出ない実数型を使えば良い。
【C#】OpenAI の GPT 3.5 を使って AI とチャットするプログラムを作る【.Net Standard 2.0】
今回作成したのは、OpenAI との通信部分だけで、アバターのモデル表示などは扱っていません。
本稿では、OpenAI の API を利用し、GPT 3.5 で通信する方法、OpenAI の API を利用する際の注意点などについて説明します。
本稿に掲載しているソースコードは、以下の環境で動作確認しています。
Visual Studio 2022
.Net Standard 2.0
C# 7
Windows 11 Home
“【C#】OpenAI の GPT 3.5 を使って AI とチャットするプログラムを作る【.Net Standard 2.0】” の続きを読む
【Unity】C#スクリプトをDLL化する手順
この記事では Unity の C# スクリプトをDLL化する手順と注意点について説明します。
執筆時に扱った Unity のバージョンは 2021.1.6f1 です。
プラットフォームは Windows 10 (64ビット版) を対象としています。
2023/10/15 修正
Visual Studio 2022 ではターゲットフレームワークを .Net Standard 2.0 に変更する方法が違うので記事を修正しました。
【.Net】アプリのパスを取得する方法っていくつもあるけど何か違うの?【C#】
.Net アプリ パス…で検索すると、だいたい以下の4つのメソッドとプロパティが見つかります。
どの記事を見ても、どれを使っても良い…みたいなことが書いてあります。
- Application.StartupPath
- Assembly.GetExecutingAssembly().Location
- AppDomain.CurrentDomain.BaseDirectory
- Environment.CurrentDirectory
でも、ふと疑問がわきます。
「どれを使っても同じ結果を得られるなら、なんで4通りもの方法が用意されているんだろう?」
同じものを4つに分ける意味はありません。
本当に「同じ」なら、1つあれば良いはずです。
実はこれ、作成するアプリや目的によって使い分ける必要があります。
【日本の恥】ガーベジコレクションをガベージコレクションと言うのをそろそろ止めるべき
スペルミスは良くあることなので、気づいたら直せば良いのですが、和製英語は広く社会に認知されているのでどうしようもないのが困ります。
【C#】IDisposable を継承する際に Dispose パターンの知識が必要になる理由
SonarLint を使っていなければ気づかなかったシリーズ。
C# は C++ と比べて変なテクニックを山ほど覚える必要がなく、とても扱いやすい言語だと思っていたのですが、最近はそうでもないと思うようになってきました。
using System; // ヒャッハー集団のベースクラス public class HyahhaaBase : IDisposable { public virtual void Dispose() { // アンマネージドリソースを解放する処理 } } // モヒカンヒャッハークラス sealed class MohicanHyahhaa : HyahhaaBase { public override void Dispose() { // 子クラスのアンマネージドリソースを解放する処理 } }
このコードはメモリリークします。
SonarLint については以下の記事で簡単に紹介しています。
その他の、SonarLint を使っていなければ気づかなかったシリーズ。
【.Net C#】System.Exception を継承すると ISerializable がどうのこうのと警告が出る
厄介なバグに繋がる可能性があるコード
class Test { public class Hoge : System.Exception {} }
“【.Net C#】System.Exception を継承すると ISerializable がどうのこうのと警告が出る” の続きを読む