T不包含特定方法的定义

时间:2015-05-13 11:14:34

标签: c# generics

我有两节课。一个是Parser类,另一个是Demo类(即Generic class)。 Parser类有一个解析方法,即'MyParserMethod',我想在'Demo'类中使用它。但是,我认为这不是练习,直到我定义'T'是解析器类类型。目前,在演示类中无法访问“MyParserMethod”。如何在Demo类中使用它?

public class Demo<T> : IDemo 
{
    private T _parser;
    public Demo(T objParserClass)
    {
        _parser = objParserClass;
    }

    public void GetParseValue()
    {
        Dictionary<int,string> _Collection = new Dictionary<int,string>();
        _Collection  = _parser.MyParsingMethod(); // Error here.
    }
}

3 个答案:

答案 0 :(得分:4)

解决方案是限制T

public class Demo<T> : IDemo where T : IParser
{
    // ...
}

public interface IParser
{
    Dictionary<int,string> MyParsingMethod();
}

public class Test : IParser
{
    // ...
}

然后您可以按如下方式使用它:

Demo<Test> instance = new Demo<Test>(new Test());

答案 1 :(得分:0)

使用where子句,以便说这个T至少是你的Parser类,也许是它的decedent

Public class Demo<T> : IDemo 
where T:Parser
{
   //...
}

答案 2 :(得分:0)

如果您不需要,请不要使用泛型,而只是将Parser实例传递到您的Demo类中。但是,如果您要使用各种Parser实现,那么在泛型方法上使用'where'子句如下:

Public class Demo<T> : IDemo where T : Parser
{
    ...