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

    1. <tfoot id='cZL5e'></tfoot>
      <legend id='cZL5e'><style id='cZL5e'><dir id='cZL5e'><q id='cZL5e'></q></dir></style></legend>

        <bdo id='cZL5e'></bdo><ul id='cZL5e'></ul>
      1. <small id='cZL5e'></small><noframes id='cZL5e'>

        是否可以将委托作为属性参数?

        时间:2023-11-11
        <tfoot id='6tLYV'></tfoot>

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

              <small id='6tLYV'></small><noframes id='6tLYV'>

                <tbody id='6tLYV'></tbody>
              <legend id='6tLYV'><style id='6tLYV'><dir id='6tLYV'><q id='6tLYV'></q></dir></style></legend>
                  <bdo id='6tLYV'></bdo><ul id='6tLYV'></ul>
                  本文介绍了是否可以将委托作为属性参数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  是否可以将委托作为属性的参数?

                  Is it possible to have a delegate as the parameter of an attribute?

                  像这样:

                  public delegate IPropertySet ConnectionPropertiesDelegate();
                  
                  public static class TestDelegate
                  {
                      public static IPropertySet GetConnection()
                      {
                          return new PropertySetClass();
                      }
                  }
                  
                  [AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface,AllowMultiple=false,Inherited=true)]
                  public class WorkspaceAttribute : Attribute
                  {
                      public ConnectionPropertiesDelegate ConnectionDelegate { get; set; }
                  
                      public WorkspaceAttribute(ConnectionPropertiesDelegate connectionDelegate)
                      {
                          ConnectionDelegate = connectionDelegate;
                      }
                  }
                  
                  [Workspace(TestDelegate.GetConnection)]
                  public class Test
                  {
                  }
                  

                  如果不可能,有什么明智的选择?

                  And if its not possible, what are the sensible alternatives?

                  推荐答案

                  不,您不能将委托作为属性构造函数参数.查看可用类型:属性参数类型
                  作为一种解决方法(尽管它很麻烦且容易出错),您可以创建一个 带反射的委托:

                  No, you cannot have a delegate as an attribute constructor parameter. See available types: Attribute parameter types
                  As a workaround (although it's hacky and error prone) you can create a delegate with reflection:

                  [AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface, AllowMultiple = false, Inherited = true)]
                  public class WorkspaceAttribute : Attribute
                  {
                      public ConnectionPropertiesDelegate ConnectionDelegate { get; set; }
                  
                      public WorkspaceAttribute(Type delegateType, string delegateName)
                      {
                           ConnectionDelegate = (ConnectionPropertiesDelegate)Delegate.CreateDelegate(typeof(ConnectionPropertiesDelegate), delegateType, delegateName);
                      }
                  }
                  
                  [Workspace(typeof(TestDelegate), "GetConnection")]
                  public class Test
                  {
                  }
                  

                  这篇关于是否可以将委托作为属性参数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:Delegate.EndInvoke() 真的有必要吗? 下一篇:C# 泛型不允许委托类型约束

                  相关文章

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

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