您现在的位置: 爱51代码网 >> 范文 >> 文章正文
C# GetCustomAttributes怎么用

C# GetCustomAttributes怎么用

这个是返回得到自定义属性的Object数组,的第一个参数官方说是指定的类型
在这个例子中返回的是得到什么的类型的自定义属性
object[] attribs = f.GetCustomAttributes(typeof(ConfigPropertyAttribute), false);


using System;
namespace Game.Base.Config
{
[AttributeUsage(AttributeTargets.Field, AllowMultiple = false)]
public class ConfigPropertyAttribute : Attribute{
private string m_key;
private string m_description;
private object m_defaultValue;
        public ConfigPropertyAttribute(string key, string description, object defaultValue)
           {
m_key = key;
m_description = description;
m_defaultValue = defaultValue;
}
public string Key{get{return m_key;}}
public string Description{get{return m_description;}}
public object DefaultValue{get{return m_defaultValue;}}
    }
}
ConfigPropertyAttribute类型的啊

如何利用反射技术来读取我们自定义的Attribute。
1 Type t;
Student instence = new Student();
2 type = instence.GetType();
3 tableName = (type.GetCustomAttributes(typeof(TalbeAttribute), false)[0] as TalbeAttribute).TableName;
4 这样我们就得到了实体类上所附加的TableAttribute特性类的TableName属性。
我们可以通过一个类的Type的GetCustomAttributes方法来读取这个类上所附加的特性。这个方法的具体用法在MSDN上已经说得很清楚,大家自己可以研究一下。
读取到类所对应的表的特性了,接下来我们该读取类里包含的属性上所附加的ColumAttribute特性了。
private static PropertyInfo[] propInfos = null;
private static List<PropertyInfo> propPrimarys = new List<PropertyInfo>(); //保存主键列
private static List<PrimaryKey> primaryColums = new List<PrimaryKey>(); //保存主键列特性
foreach (PropertyInfo prop in propInfos)
            {
                if (prop.GetCustomAttributes(false).Length <= 0)
                {
                    continue;
                }

                if (prop.GetCustomAttributes(false)[0] is PrimaryKey)
                {
                    propPrimarys.Add(prop);
                    PrimaryKey primaryAttr = prop.GetCustomAttributes(typeof(PrimaryKey), false)[0] as PrimaryKey;
                    primaryColums.Add(primaryAttr);
                }
            }
这样我们就可以读取属性里所对应的数据库表里的主键了。
到这里我们基本已经掌握了利用反射读取和设置类属性值,设计自己的特性类,利用反射读取特性类的属性了。
下次我们就要开始持久层框架的设计了。

  • 上一篇文章:

  • 下一篇文章: 没有了
  • 最新文章 热点文章 相关文章
    undefined reference timer_crea
    linux文件/usr/lib破坏了,还原后
    linux上运行system函数时,print
    Failed to open eth0
    android手机无法与eclipse或电脑
    C/C++洗牌算法源代码
    servlet技术实现用户名唯一的验证
    E-business suite system servic
    ZOJ 3700 Ever Dream 文章中单词
    TortoiseGit和msysGit安装及使用
    ZOJ 3700 Ever Dream 文章中单词
    TortoiseGit和msysGit安装及使用
    sharepoint 2010 获取用户信息Us
    mysql主从同步延迟方案解决的学习
    生日旅行总结
    中小板生日快乐随感
    送生日快乐桑葚乳酪小蛋糕
    写给女儿的生日快乐
    总分公司财务核算
    恢复使用繁体字可行性研究报告
    asp.net 客户端如何加密
    asp.net两个单击事件如何互相
    server.mappath如何取得服务
    在js中动态添加表格行时,怎
    asp动态网站滚动字 如何链接
    Could not load file or ass
    asp.net线程中每隔段时间执行
    ASP.net的Button的背景色为何
    ASP.NET web打印代码
    jquery如何取指定form中的指
     



    设为首页 | 加入收藏 | 网站地图 | 友情链接 |