基于C#中的一些通用参数实现抽象类

时间:2009-08-13 17:33:44

标签: c# generics

我想做类似下面的事情

public interface IFormatter<TData, TFormat>
{
    TFormat Format(TData data);
}

public abstract class BaseFormatter<TData> : IFormatter<TData, XElement>
{
    public abstract XElement Format(TData data);
}

但是,当我执行上述操作时,我收到的错误是“类型或方法有2个通用参数,但只提供了1个......”。我会尝试用另一种方式解决它,但我很好奇为什么不能这样做?

请注意,虽然这在单个程序集中编译,但我注意到错误消息实际上是由使用这段代码的程序集(测试程序集)生成的。这是生成上述错误消息的地方。

4 个答案:

答案 0 :(得分:4)

这是您拥有的完全代码吗?如果是,那么您错过了关键字 class

除此之外,这应该编译得很好:

public interface IFormatter<TData, TFormat>
{
    TFormat Format(TData data);
}

public abstract class BaseFormatter<TData> : IFormatter<TData, XElement>
{
    // blah blah
    public XElement Format(TData data)
    {
        throw new NotImplementedException();
    }
}

答案 1 :(得分:1)

是否可能(间接)抱怨抽象类声明中缺少的'class'关键字?

答案 2 :(得分:0)

此代码符合我的要求:

public interface IFormatter<TData, TFormat>
{
    TFormat Format(TData data);
}

public abstract class BaseFormatter<TData> : IFormatter<TData, XElement>
{
    #region IFormatter<TData,XElement> Members

    public XElement Format(TData data)
    {
        throw new NotImplementedException();
    }

    #endregion
}

答案 3 :(得分:0)

万一有人遇到此问题:

事实证明,该问题与同一解决方案中MSTest单元测试项目中的私有字段访问器有关。当我删除了项目编译的访问者时。