代码之家  ›  专栏  ›  技术社区  ›  ram

通用接口

  •  6
  • ram  · 技术社区  · 15 年前

    public interface ITranslator<E, R>
    {       
        E ToEntity<T>(R record);
    }
    
    class Gens : ITranslator<string, int>
    {
        #region ITranslator<string,int> Members
    
        public string ToEntity<MyOtherClass>(int record)
        {
            return record.ToString();
        }
    
        #endregion
    }
    

    当我编译这个时,我得到一个错误 Type parameter declaration must be an identifier not a type

    为什么我不能拥有 ToEntity<MyOtherClass> 但只能有 ToEntity<T> ??

    编辑:这是什么 MyOtherClass

    3 回复  |  直到 15 年前
        1
  •  9
  •   Dan Tao    15 年前

    您的接口有一个通用的 ToEntity<T> Gens ToEntity<MyOtherClass> 通用的 方法可以接受任何类型参数,可能给定了 T . 你的 氏族 类试图为提供一个定义 ToEntity 仅适用于类型参数 MyOtherClass ,这违背了泛型的目的。)

    肌类

    为了举例说明,下面是您当前对 ITranslator<E, R> 界面提供简单的英语:

    “我提供了一种翻译机制 R 成为一个实体 类型 E 这一机制正在形成 依赖于任何用户指定的类型 ."

    氏族 另一方面,它当前的设计方式“实现”了上述接口,如下所示:

    “我可以将整数转换为字符串。 我提供 幻觉 用户必须指定要控制的类型 翻译是如何进行的,但是 这个 这涉及到班级

    氏族 是不是真的在做什么 接口保证 . 也就是说,它不愿意接受用户指定的类型 方法。这就是为什么这段代码不能为您编译。

        2
  •  2
  •   Joel Etherton    15 年前

    必须在泛型类型上声明约束。

    public string ToEntity<T>(int record) where T : MyOtherClass
    
        3
  •  1
  •   Josh    15 年前

    啊,我明白你想做什么了。。。您已经在某处将MyOtherClass定义为一个类,但您正在尝试将其用作ToEntity中的类型参数。你到底想让我的另一个班级如何参与ToEntity?