如何限制用于通用接口的类型?

时间:2011-12-21 05:53:47

标签: c#

我有以下界面:

public interface IService<T>
    {
        void AddOrUpdate(T tab);
        bool Available();

我可以限制此界面,使其只能用于某些类型吗?

什么是参数名称“标签”的重要性。这可能是任何合理的名称,还是与使用接口的位置有关系?

4 个答案:

答案 0 :(得分:5)

您可以使用where关键字来限制用于泛型类型的类型。

示例:

public interface IService<T>where T:IComparable { }
{
        void AddOrUpdate(T tab);
        bool Available();

http://msdn.microsoft.com/en-us/library/bb384067.aspx

字母'T'没有意义。只需指定类型或模板。你可以用任何字母。 'tab'只是一个名字。您可以指定任何有意义的名称。

答案 1 :(得分:2)

请查看以下有关Constraints on Type Parameters的文章。这些约束是使用where关键字定义的。

答案 2 :(得分:2)

您可以这样说:

public interface IService<T> where T : Employee
{
            void AddOrUpdate(T tab);
            bool Available();
}

答案 3 :(得分:1)

  

我可以限制此界面,使其只能用于某些类型吗?

是的,您可以限制泛型类型用法:

public interface IService<T> where T : IServicableType

在这种情况下,T只能是实现(或继承自,类)IServicableType的类型。

  

这可能是任何明智的名称,还是与使用界面的位置有关系?

不,参数名称无关紧要。类的方法的参数名称不需要反映接口的参数名称。这是因为参数名称不会影响方法的签名。只有签名必须匹配。