C# T不包含特定方法的定义

C# T不包含特定方法的定义,c#,generics,C#,Generics,我有两节课。一个是解析器类,另一个是演示类(即泛型类)。Parser类有一个解析方法,即“MyParserMethod”,我想在“Demo”类中使用它。但是,在我定义'T'是解析器类类型之前,我认为这不是实践。目前,演示类中无法访问“MyParserMethod”。在演示课上如何使用它 public class Demo<T> : IDemo { private T _parser; public Demo(T objParserClass) {

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

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.
    }
}
公共类演示:IDemo
{
私有T_解析器;
公共演示(T objParserClass)
{
_parser=objParserClass;
}
public void GetParseValue()
{
字典_Collection=新字典();
_Collection=\u parser.MyParsingMethod();//此处出错。
}
}

使用where子句来说明这个T至少是您的解析器类,可能是它的死者

Public class Demo<T> : IDemo 
where T:Parser
{
   //...
}
公共类演示:IDemo
其中T:Parser
{
//...
}

如果不需要,请不要使用泛型,只需将解析器实例传递到演示类中即可。但是,如果要使用各种解析器实现,请在通用方法上使用“where”子句,如下所示:

Public class Demo<T> : IDemo where T : Parser
{
    ...
Demo<Test> instance = new Demo<Test>(new Test());
Public类Demo:IDemo其中T:Parser
{
...

解决方案是限制
T

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

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

public class Test : IParser
{
    // ...
}
公共类演示:IDemo其中T:IParser
{
// ...
}
公共接口IParser
{
字典MyParsingMethod();
}
公共类测试:IParser
{
// ...
}
然后您可以按如下方式使用它:

Public class Demo<T> : IDemo where T : Parser
{
    ...
Demo<Test> instance = new Demo<Test>(new Test());
Demo实例=新的Demo(newtest());

T
始终是
Parser
?看起来您的
Demo
类不必是泛型的。只需先讨论,然后再减去任何一点。如果T始终是Parser,那么我将使用where close来定义它。但问题是,T始终不是一个特定的解析器类。目前,如果我使用xyzParser,将来我将可能是使用abcParser类。我不能将t作为解析器来修复,因为它可能会在未来的另一个解析器中使用。我不想在将来的演示中做任何更改,当我将解析器切换到xyzParserSo抽象解析器时,将其切换到包含您的解析方法的IParser或ParserBase,并让您的所有解析器相应地实现/派生并使用此文章ct在您的泛型类型约束中。是的,我正在尝试类似的东西,我会再试一次,如果我卡住了,请告诉您,谢谢。。!!