天天看点

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