2

string.ContainsRabbitMq タグのようなものを表すクラスを持つのと同様の動作のインターフェイスが必要です。122が false になり、1が true'1.222.3331.1'になると言います。.Contains().Contains()

私は試した:

    interface ITag
    {
        bool Contains(ITag tag);
    }

しかし、その実装は次のようなものを与えることContainsで動作するように制限されます:ITag

    class Tag : ITag
    {
        public bool Contains(ITag tag)
        {
            throw new NotImplementedException();
        }
    }

たとえば、次のようにします。

    class Tag : ITag
    {
        public string s;
        public bool Contains(Tag other)
        {
            return s.Contains(other.s);
        }
    }

私が説明したことはインターフェイスとして実装可能であり、どのように実装できるのだろうか、アウトボックスの.Netインターフェイスはあり.Containsますか?

もちろん、私はすることができました

    interface ITag<T>
    {
        bool Contains(T tag);
    }

そして、次のようなもので実装します:

    class Tag : ITag<Tag>
    {
        public Tag(string tag)
        {
            Content = tag;
        }

        public string Content { get; private set; }

        public bool Contains(Tag other)
        {
            return other != null 
                && other.Content != null
                && Content.Contains(other.Content);
        }
    }

それでも、ITag<T>ジェネリックを使用するすべてのインターフェイスを作成する必要があり、それは望ましくありません。非一般的な方法はありますか?

4

2 に答える 2

3

以下がコンパイルされます。

interface ITag<in TTag> where TTag : ITag<TTag>
{
    bool Contains(TTag tag);
}

class Tag : ITag<Tag> 
{
    public bool Contains(Tag t)
    {
        return false;
    }
}

とは言うものの、変数宣言には常に具象型を含める必要があるため、具象型を使用するのとは対照的に、構成全体はあまり役に立ちません。

于 2013-03-31T18:53:48.533 に答える