天天看點

ASP.net用法系列:如何從基類調用LINQ/EF類的屬性

如果有各種動物,比如Dogs/Cats/Cows/...,都有不同的Age方法,若想從其基類用相同的方法ShowAge來顯示這些不同的Age,自然就可以借用基類Animal的virtual函數,比如:

[csharp] view plaincopy  

01.public class Animal    

02.{    

03.    public virtual Age    

04.    {    

05.        get {....}    

06.        set {....}    

07.    }    

08.    public ShowAge()    

09.    {    

10.        Show(Age);    

11.    }    

12.}    

13.    

14.public class Dog : Animal    

15.{    

16.    public override Age    

17.    {    

18.        get {...}    

19.        set {...}    

20.    }    

21.}    

22.public class Cat : Animal    

23.{    

24.    public override Age    

25.    {    

26.        get {...}    

27.        set {...}    

28.    }    

override是個關鍵,因為如果沒有override,則animal會調用自己的Age。如果Dog和Cat是一個LINQ/EF自動生成的類,則沒有override這個關鍵詞,這種情況就會發生。

當然不能每次到LINQ/EF生成的代碼裡邊手工加上, 怎麼辦呢?

上次遇到這個問題,搜尋而不得,測試了半天找到一個方法,今天再次用上,看來不算少見發帖共享。

在Animal裡邊,使用這些代碼:

01.public virtual int Age    

02.{      

03.    get     

04.    {     

05.        PropertyInfo pi = this.GetType().GetProperty("Age");     

06.        int age = (int)pi.GetValue(this, new object[] {});     

07.        return age;     

08.    }     

09.    set     

10.    {     

11.        PropertyInfo pi = this.GetType().GetProperty("Age");     

12.        pi.SetValue(this, value, new object[] { });     

13.    }     

14.}     

這種方法其實和“繼承”沒什麼大關系,純粹是直接讀取了資料庫表中的屬性,可以應急。

本文轉自火星人陳勇 51CTO部落格,原文連結:http://blog.51cto.com/cheny/1101221