C#类特性和属性特性

简介: using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;

using System.Reflection;

namespace ConsoleApplication6
{
    /// <summary>
    /// AttributeTargets.Class可以对类应用属性
    /// Inherited能否由派生类或重写成员继承
    /// AllowMultiple能否为一个程序元素指定多个指示属性实例
    /// 也就是说AllowMultiple=false 对于一个类型,该特性只能用一次
    /// 若一个Class类型前面出现多个TableAttribute,则会出现编译错误
    /// </summary>
    [AttributeUsage(AttributeTargets.Class,Inherited=true,AllowMultiple=false)]
    public class TableAttribute : Attribute
    {
        private string _tableName;
        public TableAttribute()
        {
 
        }
        public TableAttribute(string tableName)
        {
            this._tableName = tableName;
        }
        public string TableName
        {
            get
            {
                return this._tableName;
            }
            set
            {
                this._tableName = value;
            }
        }
    }
    /// <summary>
    /// 列特性
    /// AttributeTargets.Property可以对属性应用特性
    /// </summary>
    [AttributeUsage(AttributeTargets.Property,Inherited=false,AllowMultiple=false)]
    public class ColumAttribute : Attribute
    {
        private string _columName;
        private DbType _dbType;

        public ColumAttribute()
        {
 
        }
        public ColumAttribute(string columName)
        {
            this._columName = columName;
        }
        public ColumAttribute(string columName, DbType dbType)
        {
            this._columName = columName;
            this._dbType = dbType;
        }
        public string ColumName
        {
            get
            {
                return this._columName;
            }
            set
            {
                this._columName = value;
            }
        }
        public DbType DbTypeAttr
        {
            get
            {
                return this._dbType;
            }
            set
            {
                _dbType = value;
            }
        }
    }

    [Table("User")]
    public class User
    {
        [Colum("userId",DbType.Int32)]
        public int UserId { get; set; }
        [Colum("userName", DbType.String)]
        public string UserName { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            User u = new User();
            u.UserId = 6;
            u.UserName = "allen";


            Type myObjType = u.GetType();
            Dictionary<string,string> columName = new Dictionary<string,string>();
            //获取自定义特性
            object temp = myObjType.GetCustomAttributes(typeof(TableAttribute),false).First();
            TableAttribute myAttr = temp as TableAttribute;
            Console.WriteLine("表名:{0}", myAttr.TableName);

            Console.WriteLine("列的名称和值:");
            foreach (PropertyInfo pi in myObjType.GetProperties())
            {
                object attr = pi.GetCustomAttributes(false).First();
                ColumAttribute cattr = attr as ColumAttribute;
                Console.WriteLine("{0}:{1}",cattr.ColumName,pi.GetValue(u,null));
            }

            Console.ReadKey();

        }
    }
}

目录
相关文章
|
1月前
|
开发框架 .NET C#
C#|.net core 基础 - 删除字符串最后一个字符的七大类N种实现方式
【10月更文挑战第9天】在 C#/.NET Core 中,有多种方法可以删除字符串的最后一个字符,包括使用 `Substring` 方法、`Remove` 方法、`ToCharArray` 与 `Array.Copy`、`StringBuilder`、正则表达式、循环遍历字符数组以及使用 LINQ 的 `SkipLast` 方法。
|
2月前
|
存储 C# 索引
C# 一分钟浅谈:数组与集合类的基本操作
【9月更文挑战第1天】本文详细介绍了C#中数组和集合类的基本操作,包括创建、访问、遍历及常见问题的解决方法。数组适用于固定长度的数据存储,而集合类如`List<T>`则提供了动态扩展的能力。文章通过示例代码展示了如何处理索引越界、数组长度不可变及集合容量不足等问题,并提供了解决方案。掌握这些基础知识可使程序更加高效和清晰。
76 2
|
2月前
|
编译器 C# Android开发
震惊!Uno Platform 与 C# 最新特性的完美融合,你不可不知的跨平台开发秘籍!
Uno Platform 是一个强大的跨平台应用开发框架,支持 Windows、macOS、iOS、Android 和 WebAssembly,采用 C# 和 XAML 进行编程。C# 作为其核心语言,持续推出新特性,如可空引用类型、异步流、记录类型和顶级语句等,极大地提升了开发效率。要在 Uno Platform 中使用最新 C# 特性,需确保开发环境支持相应版本,并正确配置编译器选项。通过示例展示了如何在 Uno Platform 中应用可空引用类型、异步流、记录类型及顶级语句等功能,帮助开发者更好地构建高效、优质的跨平台应用。
176 59
|
18天前
|
JSON C# 开发者
C#语言新特性深度剖析:提升你的.NET开发效率
【10月更文挑战第15天】C#语言凭借其强大的功能和易用性深受开发者喜爱。随着.NET平台的演进,C#不断引入新特性,如C# 7.0的模式匹配和C# 8.0的异步流,显著提升了开发效率和代码可维护性。本文将深入探讨这些新特性,助力开发者在.NET开发中更高效地利用它们。
28 1
|
2月前
|
安全 C# 索引
C#一分钟浅谈:属性与索引器的定义
本文深入浅出地介绍了C#编程中的属性和索引器。属性让字段更安全,通过访问器方法在读写时执行额外操作,如验证数据有效性;索引器则赋予类数组般的访问方式,支持基于索引的数据访问模式。文章通过示例代码展示了如何定义及使用这两种特性,并提供了常见问题及其解决方案,帮助读者写出更健壮、易维护的代码。希望读者能从中学习到如何有效利用属性和索引器增强C#类的功能性。
83 12
|
1月前
|
Java 程序员 C#
【类的应用】C#应用之派生类构造方法给基类构造方法传参赋值
【类的应用】C#应用之派生类构造方法给基类构造方法传参赋值
10 0
|
2月前
|
C# 数据安全/隐私保护
C# 一分钟浅谈:类与对象的概念理解
【9月更文挑战第2天】本文从零开始详细介绍了C#中的类与对象概念。类作为一种自定义数据类型,定义了对象的属性和方法;对象则是类的实例,拥有独立的状态。通过具体代码示例,如定义 `Person` 类及其实例化过程,帮助读者更好地理解和应用这两个核心概念。此外,还总结了常见的问题及解决方法,为编写高质量的面向对象程序奠定基础。
25 2
|
3月前
|
开发框架 .NET 编译器
总结一下 C# 如何自定义特性 Attribute 并进行应用
总结一下 C# 如何自定义特性 Attribute 并进行应用
|
3月前
|
存储 安全 编译器
C#中的属性
C#中的属性
45 7
|
3月前
|
Java C# 索引
C# 面向对象编程(一)——类
C# 面向对象编程(一)——类
33 0