有没有办法从getter或setter直接访问属性的属性?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有没有办法从getter或setter直接访问属性的属性?相关的知识,希望对你有一定的参考价值。

我有一个看起来像这样的属性:

<DataElement(0, 4)>
Private Property RiffId As String
   Get
      Dim mb As MethodBase = MethodBase.GetCurrentMethod()
      Dim de As DataElementAttribute = mb.GetCustomAttribute(Of DataElementAttribute)()
      ...
  End Get
  Set(value As String)
     ...
  End Set
End Property

(这个项目是VB,但非常欢迎C#答案。)

变量de包含null / Nothing,因为该属性作为整体应用于属性,而不是getter,这是mb变量包含的内容。是否有一种方便直接的方法来获取“父”方法库而不获取getter的名称,剥离前导“get_”,并搜索类的属性以获取属性的属性?我没有看到一个,但也许我忽略了它。

答案

好吧没有绝对的直接方式,但你可以搜索相当安全(没有涉及字符串)。看看这个例子:

using System;
using System.Linq;
using System.Reflection;

public class Program
{
    [ObsoleteAttribute("foo")]
    public static string MyProp
    {
        get
        {
            var mb = MethodBase.GetCurrentMethod();
            var prop = mb.DeclaringType.GetProperties().Single(x => x.GetGetMethod() == mb);
            return prop.GetCustomAttribute<ObsoleteAttribute>().Message;
        }
    }

    public static void Main()
    {
        Console.WriteLine(MyProp);
    }
}

结果是:

FOO

以上是关于有没有办法从getter或setter直接访问属性的属性?的主要内容,如果未能解决你的问题,请参考以下文章

有关js 的 defineProperty函数 getter setter

JS对象属性中get/set与getter/setter是什么

Python 02

Python的property _getter和setter方法

完了,开始偷懒了。???????!!!!!!!!!!!!

as3 1119: 访问可能未定义的属性 getter/setter