親戚のゲーム作ってるおじさんブログ

「そういえば、そんな人いるとか聞いたなあ」って思ったでしょ? 私です。

しくじり:自作の構造体をいろんな箇所で使うと後で泣く

構造体を作る

public struct Food
{
    int amount;
}

その構造体をいろんなところで使う

// とあるメソッドの引数
void Get~(Food food){...}
// とあるメンバ変数
Food f;
// とあるプロパティ
Food fp {get;}

いろんなところでFoodを使った処理があるが、Food以外でもこの処理をつかいたくなった。

しかし、構造体の場合、めちゃくちゃ共通化しにくいので、はじめからクラスで作っておこうというお話。

構造体は制限が多い

Foodの親をつくって、そのクラスを使う処理にするか...→できない!継承はつかえない。

Food以外にも使えるインターフェースを作って、それを使う処理にするか...→できない!インターフェースは使えない

別途クラスを作成して、その子クラスにいろんな型のメンバ変数を持つようにすればいいのでは...→Food以外のものにアクセスするためにダウンキャストが必要になる

結論

構造体は処理負荷が軽くなるが、拡張性がうんち。

構造体を使って書いたコードは、ほかの構造体orクラスで処理を使いまわすように改造しにくい。

特に理由ない限りはじめからクラスで作っておいたほうがメンテしやすい。

(それか、必要になったら、クラス化する)