<bdo id='cTw8z'></bdo><ul id='cTw8z'></ul>
  • <small id='cTw8z'></small><noframes id='cTw8z'>

      <i id='cTw8z'><tr id='cTw8z'><dt id='cTw8z'><q id='cTw8z'><span id='cTw8z'><b id='cTw8z'><form id='cTw8z'><ins id='cTw8z'></ins><ul id='cTw8z'></ul><sub id='cTw8z'></sub></form><legend id='cTw8z'></legend><bdo id='cTw8z'><pre id='cTw8z'><center id='cTw8z'></center></pre></bdo></b><th id='cTw8z'></th></span></q></dt></tr></i><div id='cTw8z'><tfoot id='cTw8z'></tfoot><dl id='cTw8z'><fieldset id='cTw8z'></fieldset></dl></div>
        <tfoot id='cTw8z'></tfoot>

        <legend id='cTw8z'><style id='cTw8z'><dir id='cTw8z'><q id='cTw8z'></q></dir></style></legend>

      1. 为什么我的 .NET 属性不执行操作?

        Why does my .NET Attribute not perform an action?(为什么我的 .NET 属性不执行操作?)

        • <tfoot id='HwyyY'></tfoot>

            <bdo id='HwyyY'></bdo><ul id='HwyyY'></ul>

            <i id='HwyyY'><tr id='HwyyY'><dt id='HwyyY'><q id='HwyyY'><span id='HwyyY'><b id='HwyyY'><form id='HwyyY'><ins id='HwyyY'></ins><ul id='HwyyY'></ul><sub id='HwyyY'></sub></form><legend id='HwyyY'></legend><bdo id='HwyyY'><pre id='HwyyY'><center id='HwyyY'></center></pre></bdo></b><th id='HwyyY'></th></span></q></dt></tr></i><div id='HwyyY'><tfoot id='HwyyY'></tfoot><dl id='HwyyY'><fieldset id='HwyyY'></fieldset></dl></div>

              <tbody id='HwyyY'></tbody>
              <legend id='HwyyY'><style id='HwyyY'><dir id='HwyyY'><q id='HwyyY'></q></dir></style></legend>

                <small id='HwyyY'></small><noframes id='HwyyY'>

                  本文介绍了为什么我的 .NET 属性不执行操作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我创建了一个简单的属性:

                  I've created a simple Attribute:

                  [AttributeUsage(AttributeTargets.Method)]
                  public class InitAttribute : System.Attribute
                  {
                      public InitAttribute()
                      {
                          Console.WriteLine("Works!");
                      }
                  }
                  

                  我将其应用于一个简单的方法:

                  and I apply it to a simple method:

                  static class Logger
                  {
                      public static string _severity;
                  
                      public static void Init(string severity)
                      {
                          _severity = severity;
                      }
                  
                      [Init()]
                      public static void p()
                      {
                          Console.WriteLine(_severity);
                      }
                  }
                  

                  正在发生的事情非常直接.只是,我希望该属性执行一个操作(打印 Works!),但这不会发生.

                  What is going on is pretty streight-forward. Only, I expect the attribute to perform an action (printing Works!), but this does not happen.

                  另外,打印Works!"当然只是出于调试目的:我想访问 instance 的属性 _severity(例如,检查是否为 != null),但我所做的一切继续阅读属性(对我来说很新)是关于通过反射访问的方法或属性等等.一旦我评估了 _severity,我该如何修改被装饰方法的行为(在这种情况下,引发异常记录器未初始化"并且不执行它)?

                  Addictionally, printing "Works!" is of course just for debugging purposes: I'd like to access the instance's property _severity (to check if is != null, for example), but everything I keep reading about attributes (that are pretty new to me) is about accessing the class' methods or properties and so on via reflection. Once I've evaluated _severity, how can I modify the behavior of the decorated method (in this case, rise an exception "Logger is not initialized" and do not execute it)?

                  任何帮助表示赞赏.

                  推荐答案

                  如果您需要在控件进入方法时执行操作,您应该查看 面向方面的编程和框架,例如 PostSharp.属性并非旨在自行执行任何操作.它们只是附加在 IL 程序集中的东西上的一堆数据(或元数据,如果你愿意的话),可以在运行时查询.

                  If you need to perform an action as control enters a method, you should look at aspect-oriented programming and frameworks such as PostSharp. Attributes are not designed to perform anything by themselves. They are just a bunch of data (or metadata if you will) attached to stuff in IL assemblies that can be queried at runtime.

                  这篇关于为什么我的 .NET 属性不执行操作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  Performance overhead of using attributes in .NET(在 .NET 中使用属性的性能开销)
                  Accessing attribute info from DTE(从 DTE 访问属性信息)
                  c# Hide a property in datagridview with datasource(c#使用数据源隐藏datagridview中的属性)
                  Extract Display name and description Attribute from within a HTML helper(从 HTML 帮助器中提取显示名称和描述属性)
                  How can I force the PropertyGrid to show a custom dialog for a specific property?(如何强制 PropertyGrid 显示特定属性的自定义对话框?)
                  Associate attribute with code generated property in .net(将属性与 .net 中的代码生成属性相关联)

                • <i id='vqmbL'><tr id='vqmbL'><dt id='vqmbL'><q id='vqmbL'><span id='vqmbL'><b id='vqmbL'><form id='vqmbL'><ins id='vqmbL'></ins><ul id='vqmbL'></ul><sub id='vqmbL'></sub></form><legend id='vqmbL'></legend><bdo id='vqmbL'><pre id='vqmbL'><center id='vqmbL'></center></pre></bdo></b><th id='vqmbL'></th></span></q></dt></tr></i><div id='vqmbL'><tfoot id='vqmbL'></tfoot><dl id='vqmbL'><fieldset id='vqmbL'></fieldset></dl></div>
                • <legend id='vqmbL'><style id='vqmbL'><dir id='vqmbL'><q id='vqmbL'></q></dir></style></legend><tfoot id='vqmbL'></tfoot>
                    <tbody id='vqmbL'></tbody>
                      <bdo id='vqmbL'></bdo><ul id='vqmbL'></ul>

                          <small id='vqmbL'></small><noframes id='vqmbL'>