有什么方法可以使用吗?
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类中)并且不使用泛型类...但是我需要这个实现才能工作
您需要添加一个约束上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)
| 归档时间: |
|
| 查看次数: |
100 次 |
| 最近记录: |