2011-12-01 193 views
0

只是對泛型進行一些閱讀。我已經寫了一個小的測試工具...爲什麼智能感知不能在我的Generic上工作?

public interface IAnimal 
    { 
     void Noise(); 
    } 

    public class MagicHat<TAnimal> where TAnimal : IAnimal 
    { 
     public string GetNoise() 
     { 
      return TAnimal.//this is where it goes wrong... 
     } 
    } 

但出於某種原因,即使我已經把通用約束的類型,它不會讓我回到TAnimal.Noise()...?

我錯過了什麼嗎?

+0

IAnimal是一個接口,你需要定義噪聲法。 – JonH

回答

8

您需要一個可以調用Noise()的對象。

public string GetNoise(TAnimal animal) 
{ 
    animal.Noise() 
    ... 
} 
+1

+1擊敗我15秒:)也許我會添加一些額外的答案:你正試圖調用一個類型的實例方法。 – leppie

+0

+1打我時,我也打字。 – NexAddo

0

我覺得MagicHat

這裏是C# Corner一個很好的例子,你可能需要的類型TAnimal的對象類:

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); } 
    } 
}