c#中的特性

在C#中,特性(Attributes)是一种向程序元素(如类、方法、属性等)添加元数据的方式。特性可以用来提供关于程序元素的附加信息,这些信息可以在编译时和运行时被访问。

特性主要有以下几个用途:

  1. 提供元数据:特性可以提供关于类、方法、属性等的附加信息,这些信息可以被编译器、运行时环境或其他工具使用。

  2. 标记程序元素:特性可以用来标记程序元素,以便在编译时或运行时进行特定的处理。例如,使用 [Obsolete] 特性可以标记一个方法或类为已过时。

  3. 自定义行为:开发者可以创建自定义特性,以提供特定的行为或功能。例如,通过自定义特性,可以在运行时动态地改变程序的行为。

  4. 支持反射:特性与反射紧密集成,使得程序可以在运行时查询和使用特性提供的信息。

  5. 简化代码:使用特性可以简化代码,避免重复代码,提高代码的可维护性和可读性。

C#中一些常用的内置特性包括:

  • [Obsolete]:用于标记类、方法、属性等为已过时,如果代码中使用了这些元素,编译器会发出警告。

  • [Serializable]:指示一个类可以被序列化,这对于跨应用程序域或网络传输对象非常有用。

  • [AttributeUsage]:定义自定义特性的使用方式,例如它可以应用于类、方法或属性。

  • [Flags]:用于标记枚举,表示枚举可以作为一组标志来使用,通常与位运算结合使用。

  • [Conditional]:用于条件编译,只有当定义了特定的预处理器符号时,标记的方法才会被调用。

using System.Diagnostics;
​
namespace _7._14day01
{
    internal class Program
    {
        static void Main(string[] args)
        {
            UserClass userClass = new UserClass();
            userClass.print();
​
        }
        
​
    }
    public class UserClass
    {
        [DebuggerStepThrough]
        public  void print()
        {
​
            Console.WriteLine("这个方法很简单");
        }
    }
}
​

能够直接跳过该方法的Debug

using System.Diagnostics;
​
namespace _7._14day01
{
    internal class Program
    {
        static void Main(string[] args)
        {
            UserClass userClass = new UserClass();
            userClass.print();
​
        }
        
​
    }
    public class UserClass
    {
       
        [Obsolete("1111", true)]
        public  void print()
        {
​
            Console.WriteLine("这个方法很简单");
        }
    }
}
​

当将[Obsolete]标记为true时 如果使用该类 系统会报错

使用的地方

几乎所有的框架都用到了,MVC---WebApi----EF-----IOC----AOP

特性的使用场景:可以用来做数据验证。

特性分类

第一种C#自带

第二种 自定义

使用方法如下

using System.Diagnostics;
​
namespace _7._14day01
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //UserClass userClass = new UserClass();
            //userClass.print();
            //UseAttribute useAttribute = new UseAttribute();
            AttributeTest attributeTest = new AttributeTest();
            attributeTest.Test();
​
        }
​
​
    }
​
    class AttributeTest
    {
        public void Test()
        {
            Type type = typeof(UseAttribute);
            object[] obj = type.GetCustomAttributes(true);
            foreach (object customArributes in obj)
            {
                DefindAttribute defindAttribute = customArributes as DefindAttribute;
                if(defindAttribute != null)
                {
                    Console.WriteLine(defindAttribute.Showinfo);
                }
            }
        }
    }
​
    [DefindAttribute("调用了这个特性DefindAttribute")]
    class UseAttribute
    {
​
​
​
    }
    class DefindAttribute : Attribute
    {
        public DefindAttribute(string showinfo)
        {
            Showinfo = showinfo;
​
        }
        public string Showinfo { get; set; }
    }
​
​
}
​

  • 20
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值