Unity属性とはC#に属性(Attribute)という機能があり、これを付ける事でクラスやメンバーに情報を追加することができます。使用されている有名なものでは、デバッグ時だけコンパイルされる"Conditionat"属性や、廃止予定を予告するための"Obsolete"属性が有名です。etc...)また属性は自作することもできます。自作の属性は付与しても特に何が起きるわけではないので純粋な情報追加という意味になります。外部ツールでアセンブリからメタ情報を読み取ってCI時にチェックするという使用方法もあります。最終的にかなり手間がかかるので面倒なため限られた人しかやっていません。後から特別な方法で付与した属性の値は取り出すことができるのでこれを利用してenumを拡張するのような使い方をするのが一番よくある利用のされかたかと思います。自作の属性でプロパティやメソッドに説明を付与するで、アイデアレベルになりますが、の属性を使ってメソッドや属性に説明を追加したいと思います。コメントだと自由記述過ぎるのため、特定の属性が付与されていることで制約を表すことに使えないかなと。属性とは自作の属性でプロパティやメソッドに説明を付与するImplementAttribute:インターフェースの実装を明示するReqireWithNoCheckAttribute:指定が必須だけどチェックしないSideEffectAttribute:呼び出すと副作用が発生するDoNotChangeAttribute:値を変えてはいけない最後にImplementAttribute:インターフェースの実装を明示するC#は言語仕様上インターフェースを具象クラスに実装した場合、メソッドにoverrideキーワードをつけません。キーワード指定が必須で後からコードを見たときに区別が一瞬つかないときがあります。APIコメントがインターフェースと実装でコピペされているのも結構無駄な感じなのでImplementAttributeを作成してoverrideキーワードの代わりにしたいと思います。属性の宣言は以下の通りです。付与して説明するだけなのでコンストラクターで引数を指定するだけで値の保存などはしません。インターフェースを実装していることを表します。付与するだけで特にシステム上の意味はありません。}}上記属性の使用方法です。}}後から見たときにインターフェースを実装していることを属性で明示できたような気がします。ReqireWithNoCheckAttribute:指定が必須だけどチェックしないパラメーターとして渡した値が渡した先でチェックされるのかされないのかを属性によって明示します。チェックしないけど必須パラメーター(パフォーマンス上の都合など)や、プロパティに何か指定しないと後の処理が動かなくなるなどを属性で明示します。値の設定がインスタンス生成時や以降の処理実行時に必須かどうかを表します。設定が必須のパラメーターの旨を明示してオブジェクトを作成します。必須パラメーターがメソッド内でチェックされるかどうかを指定してオブジェクトを作成します。パラメーターは渡した先でチェックされない。未検査でパラメーターの仕様で落ちる可能性がある。}}上記属性の使用方法です。有意の値をプロパティに設定する必要がある旨を表す。}}呼び出すときにパラメータやプロパティの内容に注意が必要な旨を属性で表明した気になれます。これも付与して説明するだけでシステム上何か特別な作用があるわけではないのですが、他人のコードにこれがついてると多少ありがたい時があります。SideEffectAttribute:呼び出すと副作用が発生するプロパティに値を設定すると連動してほかのプロパティが変化する(クソ設計臭がすごいですが...)や、呼び出すとオブジェクトの状態が変化するメソッドなどに付与して副作用が発生することを属性を使って明示します。呼び出しに副作用があることを明示します。付与するだけで特にシステム上の意味はありません。副作用のある対象を列挙してオブジェクトを新規作成します。names;}上記属性の使用方法です。}}呼び出すと関係ない個所に影響があることを属性の引数で説明文でも良いですし、変数名でも良いので指定して属性を付与します。副作用が無いのが一番いいですが理想通りに実装できるケースの方が少ないので他のドキュメントで説明するよりは属性で示した方が後で幸せになれると思います。DoNotChangeAttribute:値を変えてはいけないリリース後にリテラルやEnumなどを変更してはいけないことを明示します。既定値のあるSerializeAttributeやDataContract、SerializeFieldが付与されているプロパティの名称の変更の禁止は当然ですが、定数リテラルとかEnumを数字として扱っている場合、変更されると境界面や境界外で影響が発生するものに付与し変更を禁止する旨を明示します。フィールド、プロパティ、パラメータの設定値が変更禁止な事を表します。リリースした後に変更してはいけない定数などに付与します。目印として付与するだけでシステム上の意味は特にありません。既定の初期値でオブジェクトを生成します。禁止の理由や対象を説明する文字列を指定してオブジェクトを生成します。}}上記属性の使用方法です。プロパティの名前を他人が変更してデシリアライズに失敗とか最高にあるあるなので付けておいた方が身を守れます。あとはSerializeFieldの名前をリリース後に変えてしまって参照が外れたまま気が付かないとか割とよくありそうです。Enumをintにキャストしてるちょっとアレなコードの中ほどに定義を一個追加してシステムがおかしくなるとかも稀によくあるのでコードに書いておいた方がいいです。実装を直した方がいいと思いますがそういう訳にもいかない場合、属性を付与して防衛しておくのもアリかなと。やり始めるとキリがないのに実効性が無いものもたくさん出てくると思いますが個人的にあって幸せになれそうな4つを紹介しました。属性は実装に一切影なく宣言に追加できるのでこういった自己説明的な属性があってもいいのではないかなと思います。やりすぎると属性だらけになってしまう(というかそうなったら設計直した方がいいですが)のでご利用は計画的に。頑張ればCI時にインスペクションで指摘が出せる可能性もあるのでよかったら使ってみてください。»Profile受託ソフト会社員でWin系業務屋。趣味でCocos2d-x/C++を触っています。etc...主に受託・開発ネタ、Windowsの事、Srellaris、ゲーム制作の進捗の事を喋ります。Core3.xとUnityでAES暗号化を利用するC#の標準機能でデータを圧縮・展開するUnityで自動実装プロパティに表示名を指定するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。