通用对象中的调用方法

Vit*_*kyi 1 c# generics

有什么方法可以使用吗?

class A
{
    public virtual string Greet() { return "Hello"; }
}
class B : A
{
    public override string Greet() { return "Hola"; }
}
class C : A
{
    public override string Greet() { return "??????"; }
}
class Greeting<T>
{
    List<T> list;
    public Greeting(List<T> list)
    {
        this.list = new List<T>();
        this.list.AddRange(list);
    }
    public void Show()
    {
        foreach (T el in list)
            el.Greet(); // 'T' does not contain a definition for 'Greet'
    }
}
class Program
{
    static void Main(string[] args)
    {
        List<A> list = new List<A>() { new A(), new B(), new C() };
        Greeting<A> g = new Greeting<A>(list);
        g.Show();
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道在这种情况下我应该写List<Shop> list(在Greeting类中)并且不使用泛型类...但是我需要这个实现才能工作

Ale*_*rck 6

您需要添加一个约束T,如果没有它,编译器不知道你只会把它派生自对象的方式A和方法不可用:

class Greeting<T> where T : A
{
   List<T> list;
   public Greeting(List<T> list)
   {
       this.list = new List<T>();
       this.list.AddRange(list);
   }
   public void Show()
   {
      foreach (T el in list)
         el.Greet(); // 'T' does not contain a definition for 'Greet'
   }
}
Run Code Online (Sandbox Code Playgroud)