c# 特性 常见的特性相关问题

基础问题

  1. 什么是C#特性(Attributes)?

    • 答:C#特性是用于向程序元素(如类型、方法、属性等)添加元数据的声明性方式。特性可以在运行时通过反射访问,并用于控制程序行为或提供额外信息。
  2. 如何创建自定义特性?

    • 答:自定义特性需要继承自System.Attribute类。示例如下:
      [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
      public class MyCustomAttribute : Attribute
      {
          public string Description { get; }
      
          public MyCustomAttribute(string description)
          {
              Description = description;
          }
      }
      
  3. 如何在程序中应用和读取特性?

    • 答:可以通过在类、方法等上方使用方括号[]来应用特性,并通过反射读取。示例如下:
      [MyCustomAttribute("This is a custom attribute")]
      public class MyClass
      {
      }
      
      // 读取特性
      var attributes = typeof(MyClass).GetCustomAttributes(typeof(MyCustomAttribute), false);
      if (attributes.Length > 0)
      {
          var myAttr = (MyCustomAttribute)attributes[0];
          Console.WriteLine(myAttr.Description);
      }
      

进阶问题

  1. 什么是AttributeUsage特性?如何使用?

    • 答:AttributeUsage特性用于指定自定义特性可以应用到的程序元素类型以及特性使用的规则。示例如下:
      [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = false)]
      public class MyCustomAttribute : Attribute
      {
      }
      
  2. 请解释Conditional特性及其用途。

    • 答:Conditional特性用于在编译时有条件地包含方法调用。例如:
      [Conditional("DEBUG")]
      public void DebugOnlyMethod()
      {
          Console.WriteLine("This method is only called in DEBUG mode.");
      }
      
  3. 如何在特性中使用命名参数?

    • 答:命名参数用于在应用特性时为特性的属性设置值。示例如下:
      [AttributeUsage(AttributeTargets.Class)]
      public class MyCustomAttribute : Attribute
      {
          public string Description { get; set; }
          public int Version { get; set; }
      }
      
      [MyCustomAttribute(Description = "Sample class", Version = 1)]
      public class MyClass
      {
      }
      

高级问题

  1. 解释特性与反射的关系及应用场景。

    • 答:特性通常与反射结合使用,用于在运行时获取元数据并作出相应处理。例如,基于特性实现依赖注入框架、ORM框架等。
  2. C#特性在单元测试中的应用。

    • 答:特性在单元测试中广泛用于标识测试方法,例如[TestMethod]用于标识单元测试方法,[TestInitialize]用于标识测试初始化方法等。
  3. 特性如何影响代码编译或运行时行为?

    • 答:某些特性会影响编译或运行时行为,例如[Obsolete]特性会在编译时生成警告,[DllImport]特性用于P/Invoke调用等。
posted @   .NET每天都很酷  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示