- PR -

実装したプロパティの型を変えるには

1
投稿者投稿内容
naomix
ベテラン
会議室デビュー日: 2003/02/01
投稿数: 56
投稿日時: 2005-10-19 21:01
お世話になっています。
とても悩んでしまうことがあります。
ドキュメントによると、
IDbCommandインターフェースのConnectionプロパティの型は、
IDbConnectionになっています。
public interface IDbCommand
IDbConnection Connection {get; set;}

ところがその実装クラスであるOracleCommandのConnectionプロパティの型は、
OracleConnectionになっています。
public sealed class OracleCommand : Component, ICloneable, IDbCommand
public OracleConnection Connection {get; set;}

自分でも同じようなことをやろうと思い、下のように作ってコンパイルすると、
「'TestImpl' はインターフェイス メンバ 'ITest.Connection を実装しません。
'TestImpl.Connection' が public ではなく、static になっているか、
または戻り値の型が正しくありません。」
とコンパイルエラーになります。
どうすればこのような実装ができるのでしょうか。

コード:
using System;
using System.Data;
using System.Data.OracleClient;

public interface ITest
{
    IDbConnection Connection {get;}
}

public class TestImpl: ITest
{
    public TestImpl()
    {
    }

    public OracleConnection Connection
    {
        get
        {
            return new OracleConnection();
        }
    }
}

Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2005-10-19 21:05
そう言う場合、インターフェイス メンバの明示的実装を行います。

ちなみにVB.NETでは、明示的実装の代わりに別名で定義し、インターフェイスの特定メンバの実装であることをキーワードで明示したりします。
naomix
ベテラン
会議室デビュー日: 2003/02/01
投稿数: 56
投稿日時: 2005-10-19 21:37
ありがとうございます。
非常によくわかりました。
明示的実装については、見たつもりでしたが、
このように使えるとは思ってもみませんでした。
とても助かりました。

コード:
using System;
using System.Data;
using System.Data.OracleClient;

public interface ITest
{
    IDbConnection Connection {get;}
}

public class TestImpl: ITest
{
    public TestImpl()
    {
    }

    IDbConnection ITest.Connection
    {
        get
        {
            return Connection;
        }
    }

    public OracleConnection Connection
    {
        get
        {
            return new OracleConnection();
        }
    }

}

1

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