Если вы имеете в виду «для атрибутов, которые принимают один параметр, укажите имена атрибутов и значение параметра», то это проще в .NET 4.5 с помощью API CustomAttributeData
:
using System.Collections.Generic;
using System.ComponentModel;
using System.Reflection;
public static class Program
{
static void Main()
{
PropertyInfo prop = typeof(Foo).GetProperty("Bar");
var vals = GetPropertyAttributes(prop);
// has: DisplayName = "abc", Browsable = false
}
public static Dictionary<string, object> GetPropertyAttributes(PropertyInfo property)
{
Dictionary<string, object> attribs = new Dictionary<string, object>();
// look for attributes that takes one constructor argument
foreach (CustomAttributeData attribData in property.GetCustomAttributesData())
{
if(attribData.ConstructorArguments.Count == 1)
{
string typeName = attribData.Constructor.DeclaringType.Name;
if (typeName.EndsWith("Attribute")) typeName = typeName.Substring(0, typeName.Length - 9);
attribs[typeName] = attribData.ConstructorArguments[0].Value;
}
}
return attribs;
}
}
class Foo
{
[DisplayName("abc")]
[Browsable(false)]
public string Bar { get; set; }
}
Я рекомендую сначала прочитать статью Майка Уэста Область видимости в JavaScript ( зеркало ). Это отличное и удобное введение в концепции this
и цепочки областей видимости в JavaScript.
Как только вы начнете привыкать к this
, правила на самом деле станут довольно простыми. Стандарт ECMAScript 5.1 определяет это
:
§11.1.1 Ключевое слово
this
Ключевое слово
this
оценивается как значение ThisBinding текущего контекста выполнения
ThisBinding - это то, что интерпретатор JavaScript поддерживает как оценивает код JavaScript, как специальный регистр ЦП, который содержит ссылку на объект. Интерпретатор обновляет ThisBinding всякий раз, когда устанавливает контекст выполнения в одном из трех различных случаев:
Это случай кода JavaScript, который оценивается на верхнем уровне, например когда непосредственно внутри