- PR -

インタフェースの実装に関する動作について

1
投稿者投稿内容
いわた
会議室デビュー日: 2005/10/07
投稿数: 16
投稿日時: 2008-06-04 16:21
.NET Framework 2.0にて、インターフェイス実装の動作についてちょっとした疑問があるのですが、
どなたかご存知でしょうか?


以下のようなインターフェイスとクラスがあるとして、
コード:
interface ITest
{
    void Hoge();
}

class Test1 : ITest
{
    public void Hoge(){  Console.WriteLine("This is Test1."); }
}

class Test2 : Test1
{
    public new void Hoge(){  Console.WriteLine("This is Test2."); }
}

class Test3 : Test1, ITest
{
    public new void Hoge(){  Console.WriteLine("This is Test3."); }
}



以下のようなプログラムを実行すると、
コード:
static void Main(string[] args)
{
    ((ITest)new Test1()).Hoge();
    ((ITest)new Test2()).Hoge();
    ((ITest)new Test3()).Hoge();
}



以下のように出力されます。
コード:
This is Test1.
This is Test1.
This is Test3.



1行目2行目は当たり前として、3行目がTest1ではなくTest3になるっていうのは、
言語仕様的に明文化されていることなんでしょうか?

実際そういう風に動いてるんだからそれでいいじゃんって話もあるとは思うのですが、
上記の動作を期待してプログラムを書いていいものかどうかちょっと気になっています。
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2008-06-04 21:54
引用:

いわたさんの書き込み (2008-06-04 16:21) より:

以下のように出力されます。
コード:
This is Test1.
This is Test1.
This is Test3.



1行目2行目は当たり前として、3行目がTest1ではなくTest3になるっていうのは、
言語仕様的に明文化されていることなんでしょうか?



Test3クラスはITestインタフェースを再実装しているのでそのままの結果だと思いますが、言語仕様で確認したわけではありませんが、とりあえず目次だけ見てみました。
13.4.4 Interface re-implementation(C# 1.0の仕様書)で解説されているようです。

詳しくは言語仕様書をダウンロードして読んで確認してください。
(C#2.0以降の言語仕様書は差分になっているので本題の件はC#1.2以前で確認が必要です)

ダウンロード先がちょっと見つけられなかったのでWeb上のをどうぞ↓
http://msdn.microsoft.com/en-us/library/aa664594(VS.71).aspx

かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2008-06-05 08:44
引用:

よねKENさんの書き込み (2008-06-04 21:54) より:

詳しくは言語仕様書をダウンロードして読んで確認してください。
(C#2.0以降の言語仕様書は差分になっているので本題の件はC#1.2以前で確認が必要です)

ダウンロード先がちょっと見つけられなかったのでWeb上のをどうぞ↓
http://msdn.microsoft.com/en-us/library/aa664594(VS.71).aspx


Visual Studio のインストールディレクトリ\VC#\Specifications\1041
2005 の場合は日本語であったはず、2008 は C#3.0 の英語しかない。。。
_________________
かるあ のメモスニペット
いわた
会議室デビュー日: 2005/10/07
投稿数: 16
投稿日時: 2008-06-08 09:29
よねKENさん
かるあさん

ありがとうございます。
すみません。しばらく見れてなかったので、お礼が遅れました。

今回はちょっと検索キーワードが思いつかなかったので、悪いと知りつついきなりここで質問してしまったのですが、今後は教えていただいた資料にあたってみます。
1

スキルアップ/キャリアアップ(JOB@IT)