1

.NET 4.5 で Neo4J のデータ アクセス ライブラリをモックアップしようとしています。インターフェイスを使用して、各コマンドをデータベースに定義しています。

与えられた:

    public interface IBaseRequest 
    {
        HttpMethod HttpMethod { get; }    
        string QueryUriSegment { get; }    
    }

    public interface ICreateNode  : IBaseRequest
    {
        void CreateNode();

    }

    public interface IBaseNodeActions  : ICreateNode,ICreateNodeWProperties //...And many others, all inherit from IBaseRequest
    {
    }

    internal class TestImplClass : IBaseNodeActions {


        public TestImplClass() {


        }
        void ICreateNode.CreateNode() {
            throw new NotImplementedException();
        }
        //Only one copy of the HttpMethod and QueryUriSegment are able to be implemented
        DataCommands.HttpHelper.HttpMethod IBaseRequest.HttpMethod {
            get {
                throw new NotImplementedException();
            }
        }

        string IBaseRequest.QueryUriSegment {
            get {
                throw new NotImplementedException();
            }
        }

問題は、IBaseRequest から継承する各インターフェイスについてです。親が所有する各プロパティ (HttpMethod、QueryUriSegment) に対して実装されたプロパティが必要です。

これは可能ですか?明示的な実装を使用する必要があることはわかっていますが、それらを実装クラスにプッシュする方法はわかりません。

実装クラスで見たいものは次のとおりです。

public class TestImplClass : IBaseNodeActions{
public TestImplClass() {


        }
        void ICreateNode.CreateNode() {
            throw new NotImplementedException();
        }

        HttpMethod ICreateNode.HttpMethod {
            get {
                throw new NotImplementedException();
            }
        }

        string ICreateNode.QueryUriSegment {
            get {
                throw new NotImplementedException();
            }
        }
        HttpMethod ICreateNodeWProperties.HttpMethod {
            get {
                throw new NotImplementedException();
            }
        }

        string ICreateNodeWProperties.QueryUriSegment {
            get {
                throw new NotImplementedException();
            }
        }
}

IBaseRequest ではなく、ICreateNode と ICreateNodeWProperties に注意してください。私はそれを別の方法で行うことにオープンですが、モジュラーでテスト可能なアプローチのようです。

それが理にかなっていることを願っています!

4

3 に答える 3

1

抽象 BaseRequest クラスを定義できます。IBaseRequestプロパティを実装するもの。

したがって、すべての子インターフェースを実装するクラスはこれを継承しBaseRequest、プロパティが自動的に実装されます。

于 2013-05-24T19:28:26.793 に答える
1

私があなたが探していたものを正確に誤解した場合は許してください.

基本クラスを持つことができます:

public abstract class BaseNodeActions : IBaseNodeActions
{
    public abstract void CreateNode();
    public abstract HttpMethod HttpMethod {get;set;}
    ....
}

TestImplClass次に、継承を行いますBaseNodeActions

必要に応じて、abstract の使用を無視して、次のことを行うこともできます。

public class BaseNodeActions : IBaseNodeActions
{
    public virtual void CreateNode() { throw new NotImplementedException(); }
    public virtual HttpMethod HttpMethod {get { throw new NotImplementedException(); }
    ....
}

プロパティを仮想にすると、実際に必要なものだけをオーバーライドする必要があります。設計で許可されている場合は、例外のスローを削除してデフォルト値を返すようにすることができます。

于 2013-05-24T19:35:23.073 に答える