13

私は最近、C# の構造体がメソッドを持つことができることを発見しました。

まったく偶然にも、自分が作業していると思っていた静的クラスの静的メソッドではなく、自分のコードで空の構造体の静的メソッドを使用していたことに気付きました!

例えば

public struct Foo
{
    public static void Bar(Param param)
    {
        ...
    }
}

この時点では、プロパティがまったくないため、実際には構造体として使用されていません!

これは、クラスの静的メソッド (静的またはその他) を使用することと大きく異なりますか? どちらかを優先する理由はありますか?(私の直感では、静的構造体メソッドを使用することは、少なくとも直感的ではないことがわかります)

4

2 に答える 2

23

いいえ、静的メンバーは typeのインスタンスではなくtypeに属します。静的クラス メンバーの宣言と静的構造体メンバーの宣言の間に違いはありません (パフォーマンスに関してもセマンティクスに関しても)。

型の唯一の機能が静的メンバーを含む場合は、代わりに静的クラスを使用する必要があることに注意することが重要です。構造体には、暗黙的で変更不可能な、引数のない public コンストラクターがあります。型にインスタンス メソッドがない場合は、インスタンスを作成する機能を削除する必要があります。クラスを宣言することは、クラスstaticを宣言することと同じでabstract sealedあるため、開発者が目的のないインスタンスを誤って作成することはありません。

于 2012-11-14T02:34:42.057 に答える
3

動作は同じです。C# は、構造体とクラスの機能の共通点を大幅に増やすことで、構造体を粗末にしました。個人的には、クラスの方が正しいと思われるため、クラスを使用します (ほとんどの言語の規則に確実に準拠しています)。

于 2012-11-14T02:35:02.710 に答える