2020年09月09日
川俣晶の縁側ソフトウェアC# コーディング How Tototal 923 count

【入門級】同じオブジェクトに含まれる同じ名前のメソッドを使い分ける・同じインターフェースの実装編

Written By: 川俣 晶連絡先

同じインターフェースの実装 §

 一つのオブジェクトに同じインターフェースを複数実装することができます。

 下のサンプルソースでは、インターフェースX1を実装したクラスAを継承して、インターフェースX1を実装したクラスBを作成しています。

 つまり、クラスBのインスタンスはインターフェースX1を2回実装しています。

 では、インターフェースX1に含まれるメソッドSubは2つなのかというとそこは微妙で、一つという使い方もあるし、2つあるという使い方もあります。

 もし、別々のメソッドにしたいときには【インターフェースのメンバーを明示的に実装する】という書式を使います。サンプルソースではvoid X1.Sub()で始まるメソッドがそれにあたります。ここではインターフェースX1の名前を明示して実装しています。このX1はそのクラスで指定されたインターフェースX1を意味します。

 これで、2つのメソッドSubは使い分けることができます。そのまま呼ぶと1つめのSubメソッド、型X1を経由して呼ぶと2つめのSubメソッドになります。

罠の数々 §

  • 同じ名前のメソッドが異なる機能を持つとトラブルになるので避けたいが、複雑な継承階層があると発生しがちなのも確か。型によって呼び出し先が異なることに注意しよう
  • インターフェースには暗黙の実装と明示的な実装がある。使い方、制限事項に差異があるので注意しよう
  • クラスで同じことは起きない。C#は多重継承を許していないので、常に継承できるクラスは1つに限られているからだ。でも、インターフェースにそのような制約はない。

参考リンク §

interface (C# リファレンス)

明示的なインターフェイスの実装 (C# プログラミング ガイド)

リポジトリ §

https://github.com/autumn009/cshowto

SameNameMethod2 §

using System;

interface X1

{

    void Sub();

}

class A : X1

{

    public void Sub()

    {

        Console.WriteLine("I'm X1.Sub in A");

    }

}

class B : A, X1

{

    void X1.Sub()

    {

        Console.WriteLine("I'm X1.Sub in B");

    }

}

class Program

{

    static void Main()

    {

        var b = new B();

        b.Sub();

        ((X1)b).Sub();

    }

}

実行結果

I'm X1.Sub in A

I'm X1.Sub in B

Facebook

COOL C# CREW

C#ハウツー連載の解説増量、カラーのソース、新規書き下ろし追加の読みやすい単行本はこちら。

C#ハウツー: 逆引き入門・こんな機能はどう書くの?
キーワード【 川俣晶の縁側ソフトウェアC# コーディング How To
【C# コーディング How To】の次のコンテンツ
2020年
09月
10日
【入門級】byte型の加算がコンパイル・エラーになるケースがある!?
3days 0 count
total 1033 count
【C# コーディング How To】の前のコンテンツ
2020年
09月
08日
【入門級】同じオブジェクトに含まれる同じ名前のメソッドを使い分ける
3days 0 count
total 1233 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

https://mag.autumn.org/tb.aspx/20200909094923
サイトの表紙【C# コーディング How To】の表紙【C# コーディング How To】のコンテンツ全リスト 【C# コーディング How To】の入手全リスト 【C# コーディング How To】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.