DOBON.NET DOBON.NETプログラミング掲示板過去ログ

型違いの同一処理の多重定義について

環境/言語:[Windows XP Pro/C# 2005]
分類:[.NET]

いつもお世話になっております。

今回お聞きしたいのは、以下の事についてとなります。
「型が違う場合でも、処理が同一である場合に、処理をまとめる方法」

たとえば、以下のようなメソッドがあったとします。

Hoge(int x, int y);
Hoge(decimal x, decimal y);
Hoge(string x, string y);

こういった場合に定義をまとめる方法をどこかで見たような気がするのですが、
ご存知の方がいらっしゃいましたら、教えて頂けないでしょうか。

よろしくお願いいたします。
■No20675に返信(じゅでさんの記事)
> 今回お聞きしたいのは、以下の事についてとなります。
> 「型が違う場合でも、処理が同一である場合に、処理をまとめる方法」
>
> たとえば、以下のようなメソッドがあったとします。
>
> Hoge(int x, int y);
> Hoge(decimal x, decimal y);
> Hoge(string x, string y);
>
> こういった場合に定義をまとめる方法をどこかで見たような気がするのですが、
> ご存知の方がいらっしゃいましたら、教えて頂けないでしょうか。

メソッドのオーバーロード、Interface どちらかでしょうね。
後者であれば、ポリモーフィズムについて調べればよいです。
じゃんぬねっと様
ご回答ありがとうございました。

返信が遅れて申し訳ありません。

> メソッドのオーバーロード、Interface どちらかでしょうね。
> 後者であれば、ポリモーフィズムについて調べればよいです。

ただ、オーバーロードでもなく、デザインパターンでもなく
C#の機能として、あったような気がしたので。
そんな便利な機能はやはり無いですか。

オーバーロードで書いていってみます。

ありがとうございました。
解決済み!
■No20679に返信(じゅでさんの記事)
> C#の機能として、あったような気がしたので。
> そんな便利な機能はやはり無いですか。

たぶん、ジェネリックメソッド

public void Hoge<T>(T x,T y) where T : IMyInterface { }

のことを仰せられているのかと思いますが、
型ある程度共通しているものでないと、結局メソッドの中身でまとめられません。
型がある程度共通している場合はじゃんぬねっと様の仰せの通り、
Interfaceを使用したポリモーフィズムを使うということになるのではないでしょうか。
結局オーバーロードのほうが行数少ないかもしれません。
解決済み!
■No20679に返信(じゅでさんの記事)
> ただ、オーバーロードでもなく、デザインパターンでもなく
> C#の機能として、あったような気がしたので。
> そんな便利な機能はやはり無いですか。

まずご質問が抽象的でしてズバリな答えをするに躊躇しました。
よって私は 「これではないか?」 と思える 2 つの機能を紹介しました。

しかし "オーバーロード" の方しか正しい反応して頂いていないようです。
Interface はれっきとした機能であり、デザインパターンそのものではありません。
そしてそれで完結されてしまっているので非常に悲しい思いです。

# ちなみに私は 「ジェネリックはまずないだろう」 と思いました。
解決済み!
じゅでです。

IIJIMAS様
>たぶん、ジェネリックメソッド
>public void Hoge<T>(T x,T y) where T : IMyInterface { }

こちらになります。
いまいち使い方がわからなかったので、使い方を調べて、使えるようなら
使ってみようと考えておりました。
ありがとうございます。

じゃんぬねっと様
> しかし "オーバーロード" の方しか正しい反応して頂いていないようです。
> Interface はれっきとした機能であり、デザインパターンそのものではありません。

申し訳ありません。
確かにおっしゃるとおり、Interfaceは機能であり、デザインパターンは、
テクニック?となると思いますが、Interfaceについて出てきた時、
真っ先に浮かんだのが、デザインパターンで、Interfaceそのものに
目が向いておりませんでした。

また、私の聞いているメソッドが例が悪く、
>型ある程度共通しているものでないと、結局メソッドの中身でまとめられません。
にあたり、
># ちなみに私は 「ジェネリックはまずないだろう」 と思いました。
となったのだと思われます。

ジェネリックがいまいちどういった機能かわからなかった為、
大変曖昧な質問になってしまいました。
申し訳ありませんでした。
■No20685に返信(じゅでさんの記事)
> 申し訳ありません。
> 確かにおっしゃるとおり、Interfaceは機能であり、デザインパターンは、
> テクニック?となると思いますが、Interfaceについて出てきた時、
> 真っ先に浮かんだのが、デザインパターンで、Interfaceそのものに
> 目が向いておりませんでした。
>
> また、私の聞いているメソッドが例が悪く、
> >型ある程度共通しているものでないと、結局メソッドの中身でまとめられません。
> にあたり、
> ># ちなみに私は 「ジェネリックはまずないだろう」 と思いました。
> となったのだと思われます。
>
> ジェネリックがいまいちどういった機能かわからなかった為、
> 大変曖昧な質問になってしまいました。
> 申し訳ありませんでした。

いえいえ、とんでもないです。
ご説明ありがとうございました。
納得致しました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板