列挙型のフラグとしての処理
C# では、[Flags] 属性により列挙型で次のことが可能になります。フラグとして扱われるため、ビット単位の OR やタイプセーフな代入などの演算が便利になります。ただし、C では、この機能は本質的にサポートされていません。
列挙型フラグの作成
C で列挙型フラグを作成するには、列挙型のビット演算子を定義する方法があります。手動で。これには、ビット単位の OR、ビット単位の AND などの演算子の作成が含まれます。これらの演算子は、列挙値を整数に変換し、演算を実行して、列挙型に変換し直します。
カスタム演算子のオーバーロード
列挙型フラグのカスタム演算子のオーバーロードの例は:
enum AnimalFlags { HasClaws = 1, CanFly = 2, EatsFish = 4, Endangered = 8 }; inline AnimalFlags operator|(AnimalFlags a, AnimalFlags b) { return static_cast<AnimalFlags>(static_cast<int>(a) | static_cast<int>(b)); }
これにより、AnimalFlags 列挙に対するビットごとの OR 演算が可能になり、基本的に C# の [Flags] 属性の動作をエミュレートします。
タイプ セーフティ
タイプ セーフティを強制し、seahawk.flags = のような無効な代入を防ぐためHasMaximizeButton の場合は、テンプレート化されたラッパー クラスまたはその他の手法を使用して、有効な列挙値のみがフラグ変数に割り当てられるようにすることを検討してください。
以上がC で列挙型に対する C# の [Flags] 属性機能を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。