首页 新闻 会员 周边

在静态方法中反射当前类型信息

0
悬赏园豆:20 [已关闭问题] 关闭于 2010-01-21 16:30

如题,怎么在静态方法中得到当前类的Type。由于是静态方法,所以不能使用this关键字。

问题补充: 是在基类中的静态方法中获取子类的类型信息
luotong的主页 luotong | 初学一级 | 园豆:4
提问于:2010-01-12 10:33
< >
分享
所有回答(1)
0

楼上的是对的.

可以在静态类(如Test)里的静态方法(FuncOne)里使用如下.

System.Reflection.MemberInfo[] infos = typeof(Test).GetMember(name);

我也曾经这么用过,如下.

http://www.cnblogs.com/zhouxin/archive/2009/12/04/1617036.html

    public class DataOperate<T> where T : new()
    {
        
private static readonly List<PropertyInfo> ps = null;
        
private static readonly List<Info> infos = null;
        
private static readonly PropertyInfo time_Info = null;
        
private static readonly DateTime time = DateTime.Now;
        
private const int startIndex = 9;
        
static DataOperate()
        {
            
if (ps == null)
            {
                infos 
= new List<Info>();
                ps 
= typeof(T).GetProperties().ToList();
                
foreach (PropertyInfo item in ps)
                {
                    
if (item.ToString().Contains("String"))
                    {
                        Info info 
= new Info();
                        ColumnAttribute a 
= Attribute.GetCustomAttribute(item, typeof(ColumnAttribute)) as ColumnAttribute;
                        
string length = a.DbType.Substring(startIndex, a.DbType.IndexOf(')'- startIndex);
                        
int len = 0;
                        
if (int.TryParse(length, out len))
                        {
                            info.Length 
= len;
                            info.ProInfo 
= item;
                            infos.Add(info);
                        }
                    }
                    
else if(item.ToString().Contains("DateTime"))
                    {
                        time_Info 
= item;
                    }
                }
            }
        }

 

天天不在 | 园豆:926 (小虾三级) | 2010-01-12 11:12
typeof(classA) 获取的是classA的信息,我要的是继承于classA的子类的信息。
支持(0) 反对(0) luotong | 园豆:4 (初学一级) | 2010-01-12 11:49
呵呵,继承于classA,其实你说的这个就用我上面的那个就很要解决.只要改变一处地方如下. public class DataOperate<T> where T : classA 当然别的方法也不少.不用泛形,如上.你就要告诉我classA的子类叫什么名字.如果你说不知道,那么我建议你就用我上面的那个泛形版就好.知道classA的子类后一样可以用typeof.关建看你怎么实现.
支持(0) 反对(0) 天天不在 | 园豆:926 (小虾三级) | 2010-01-12 12:04
不过你不会是想根据一个类然后就查找他的子类. 这就麻烦了,你要知道当前你要想找的程序集.然后循环遍历所有的类来比对当前类是否是classA的子类(Type.IsAssignableFrom这个方法好像可以检查是不是有父子关系).是的话可以取当前类的信息了.
支持(0) 反对(0) 天天不在 | 园豆:926 (小虾三级) | 2010-01-12 12:11
关键是classA并不是泛型的呀
支持(0) 反对(0) luotong | 园豆:4 (初学一级) | 2010-01-12 13:13
晕,classA我知道不是泛形,而是操作classA的那个的类是泛形.如 DataOperate<T>,而T就是你要传进去的classA的子类,就如IEnumerable<string> 放进去的是string.而操作是IEnumerable.这个方法你不喜欢,下面不是说了,另外的一个方法吗.在你要查找的程序集里 遍历所有类.然后比对是否有关系一样可以的.
支持(0) 反对(0) 天天不在 | 园豆:926 (小虾三级) | 2010-01-12 13:24
你的意思我明白了,但不是我想要的方法。谢谢
支持(0) 反对(0) luotong | 园豆:4 (初学一级) | 2010-01-12 20:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册