1. ホーム
  2. c#

[解決済み] 構造体がインターフェースを実装するのは安全か?

2022-11-17 21:52:54

質問

C# 経由の CLR で構造体がインターフェースを実装するのは良くないというようなことを読んだような記憶があるのですが、それに関する情報が見つからないようです。 それは悪いことなのでしょうか。 そうすることで意図しない結果があるのでしょうか。

public interface Foo { Bar GetBar(); }
public struct Fubar : Foo { public Bar GetBar() { return new Bar(); } }

どのように解決するのですか?

この質問にはいくつかの事柄があります...

構造体がインターフェースを実装することは可能ですが、キャスト、ミュータビリティ、パフォーマンスに関する懸念があります。詳しくはこの投稿をご覧ください。 https://docs.microsoft.com/en-us/archive/blogs/abhinaba/c-structs-and-interface

一般に、構造体は値型セマンティクスを持つオブジェクトに使用されるべきです。構造体にインターフェースを実装すると、構造体とインターフェースの間で構造体のキャストを行ったり来たりするため、箱詰めの問題に直面することがあります。箱詰めの結果、構造体の内部状態を変更する操作が正しく動作しない可能性があります。