c# - 如何描述一个以 bool Contains(T) 方法作为接口(interface)的 T?

标签 c# .net interface

我想要一个类似于 string.Contains 的行为界面假设有一个类代表 RabbitMq 标签之类的东西。说有'1.222.3331.1'并在上面写着.Contains( 122 )得到 false 和 .Contains( 1 )成为现实。

我尝试过:

    interface ITag
    {
        bool Contains(ITag tag);
    }

但其实现会限制 ContainsITag 一起工作给出类似的东西:

    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);
        }
    }

我想知道我所描述的可实现接口(interface)以及如何实现,是否有任何现成的.Net接口(interface)可以.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> 的界面通用,这是不希望的。有没有非通用的方法?

最佳答案

将编译以下内容:

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

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

也就是说,与仅使用具体类型相比,整个构造并不是很有用,因为您始终需要将其包含在变量声明中。

关于c# - 如何描述一个以 bool Contains(T) 方法作为接口(interface)的 T?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15733095/

相关文章:

c# - 将自定义字体添加到 Windows Phone 8 应用程序

c# - Quartz.NET 使用新触发器集重新安排作业

java - 接口(interface)实现之间的用例

c# - 在 Roslyn 中获取 case 标签常量

c# - 在一个应用程序中使用 dapper 和 MongoDb 是否正确

c# - 如何在 C# 中实现动态 OData 客户端?

android - 一个类(class)的多个听众

c# - 如何以编程方式设置或清除 32BIT 标志?

c# - 是否有通用的 InkCanvas StrokesChanged 类型的事件?

c++ - 如何使 Win32 API 窗口看起来更现代?