我有两节课。一个是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.
}
}
答案 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
{
...