稍微阅读一下Generics。我写了一些小试验......
public interface IAnimal
{
void Noise();
}
public class MagicHat<TAnimal> where TAnimal : IAnimal
{
public string GetNoise()
{
return TAnimal.//this is where it goes wrong...
}
}
但由于某种原因,即使我在Type上放了一个通用约束,它也不会让我返回TAnimal.Noise()......?
我错过了什么吗?
答案 0 :(得分:8)
您需要一个可以调用Noise()的对象。
public string GetNoise( TAnimal animal )
{
animal.Noise()
...
}
答案 1 :(得分:0)
我认为您可能需要在类MagicHat中使用类型为TAnimal的对象
以下是C# Corner的一个很好的例子:
public class EmployeeCollection<T> : IEnumerable<T>
{
List<T> empList = new List<T>();
public void AddEmployee(T e)
{
empList.Add(e);
}
public T GetEmployee(int index)
{
return empList[index];
}
//Compile time Error
public void PrintEmployeeData(int index)
{
Console.WriteLine(empList[index].EmployeeData);
}
//foreach support
IEnumerator<T> IEnumerable<T>.GetEnumerator()
{
return empList.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return empList.GetEnumerator();
}
}
public class Employee
{
string FirstName;
string LastName;
int Age;
public Employee(){}
public Employee(string fName, string lName, int Age)
{
this.Age = Age;
this.FirstName = fName;
this.LastName = lName;
}
public string EmployeeData
{
get {return String.Format("{0} {1} is {2} years old", FirstName, LastName, Age); }
}
}