パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

C#学習 21」記事へのコメント

  • by Anonymous Coward on 2021年01月06日 23時24分 (#3954258)

    クラスを覚えたての人だとガンガン継承してしまいがち
    継承が多段になると「結局どれが実行されてんのよ」となってしまい、見通しが悪くなる
    これを起こりにくくするためと言う側面があります
    c++とかだとクラスを複数継承できるので、更に複雑さアップ。枝状に別れたスーパークラスをたどっていくと同じクラスがあったりして同名のメンバ変数があるが、どっちのクラスの変数なのかなど、もうわやになってしまう

    そんなわけでクラスの継承は一個にしたい
    でも機能は複数持たせたい
    そこでクラスは一つだけ継承可、その他はインタフェイスで、って形になってます
    純粋仮想関数だけを持つクラスと本質的には一緒ですね
    # VB6以前では継承できるのはクラスのpublic関数だけ(インタフェイスとして利用できるだけ)、とかいうラジカルな仕様でだいぶブーブー言われてました

    例外処理はエラーハンドリングを楽にするためのもので、
    起きるはずがないようなエラーや滅多に起きないエラーが出たときに一括で無難なエラー処理をさせたりするためのものです
    関数呼び出しのたびに返り値をチェックしてエラーだったら更にエラーを返して終了
    とか言うコードを書かなくて済むのでかなり見通しが良くなります
    finallyは「必ずそこを通る」ので、リソースの開放に使います
    エラーリターン時など処理を途中でやめてreturnする時、必ずファイルを閉じなきゃいけない
    そんなときにfinallyで「ファイルが開いてたら閉じる」ようにしておくとファイルの閉じ忘れが無くなりお得です

    • by Anonymous Coward

      強制したい機能を分割できること、ですかねぇ。
      オブジェクト解放時に破棄したいリソースを必ず破棄させる → IDisposable
      オブジェクト同士で比較できる → IComparable
      オブジェクトを文字列として表現できる → IFormattable
      抽象クラスの多重継承でも良いのですが、どうせ抽象メソッドだけになるのだし。

      抽象クラスはそれこそオブジェクトやクラスの抽象的表現として使いたい。

      • by Anonymous Coward

        インターフェースはインターフェースでしょ。USBとか車の給油口。
        それを実装しているものがなんのためのものかと何を受け取って何を返すのかを表現するもの。
        だから抽象的には同じだが具体的には違うことを…

        • by Anonymous Coward

          わざわざUSBインターフェースなんぞ使わんでもarduinoでいいんじゃね?って話でしょ。
          あるいはキーボードキットなんかの標準HIDデバイスキット。

Stay hungry, Stay foolish. -- Steven Paul Jobs

処理中...