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

【入門級】継承関係にないクラスの同名メソッドを同じように呼び出す

Written By: 川俣 晶連絡先

 同じ名前で同じように呼び出せるメソッドがあるとします。

 しかし、クラス間に継承関係はありません。

 これを同じように呼び出す方法はあるでしょうか?

 リフレクションのAPIで動的にメソッドを取得して呼び出すことはできますが、それよりもdynamic型を使うと簡単です。dynamic型は型チェックを一切行わない代わりに、呼び出し条件に合ったメソッドなら型に関係なく呼び出せます。

罠の数々 §

  • dynamic型は型チェックをしてくれないので、正しい呼び出しかどうかはプログラマーが自分で確認する必要がある。割と面倒くさいぞ。だからみんな使わない。
  • 同じように呼び出せれば呼び出せる。引数が厳密には違っていてもいい。サンプルソースも引数が厳密には違っている。

参考リンク §

組み込みの参照型 (C# リファレンス)

 dynamic型の説明は【組み込みの参照型】の中にある。つまり、dynamic型は常に参照型だ。さて、どんな型の値でも入れられるという意味ではdynamic型とobject型は似ている。しかし、同じではない。どこが違うのだろうか。上記のリンクを辿って調べてみよう。

リポジトリ §

https://github.com/autumn009/cshowto

DynamicType §

using System;

class A

{

    public void Sub()

    {

        Console.WriteLine("I'm class A!");

    }

}

class B

{

    public void Sub(string a = "Dummy")

    {

        Console.WriteLine("I'm class B!");

    }

}

class Program

{

    private static void commonWork(dynamic arg)

    {

        arg.Sub();

    }

    static void Main()

    {

        commonWork(new A());

        commonWork(new B());

    }

}

実行結果

I'm class A!

I'm class B!

Facebook

COOL C# CREW

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

C#ハウツー: 逆引き入門・こんな機能はどう書くの?
キーワード【 川俣晶の縁側ソフトウェアC# コーディング How To
【C# コーディング How To】の次のコンテンツ
2020年
11月
25日
【入門級】floatの最大値に1を足すと何が起こるのか?
3days 0 count
total 172 count
【C# コーディング How To】の前のコンテンツ
2020年
11月
23日
【入門級】属性を自作する
3days 1 count
total 221 count

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

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

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

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

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

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

管理者: 川俣 晶連絡先

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