Здраствуйте!
Помогите разобраться как получить дескрипшины (DescriptionAttribute) методов заданого типа, плиз, если они указаны, конечно. Или Description метода, указаного через MethodInfo.
Здравствуйте, Tiarod, Вы писали:
T>Здраствуйте! T>Помогите разобраться как получить дескрипшины (DescriptionAttribute) методов заданого типа, плиз, если они указаны, конечно. Или Description метода, указаного через MethodInfo.
Instances of MethodInfo are obtained by calling either the GetMethods or GetMethod method of a Type object.
Notes to Inheritors: When you inherit from MethodInfo, you must override GetBaseDefinition.
Здравствуйте, redrick, Вы писали:
R>Здравствуйте, Tiarod, Вы писали:
T>>Здраствуйте! T>>Помогите разобраться как получить дескрипшины (DescriptionAttribute) методов заданого типа, плиз, если они указаны, конечно. Или Description метода, указаного через MethodInfo.
R>
R>Instances of MethodInfo are obtained by calling either the GetMethods or GetMethod method of a Type object.
R>Notes to Inheritors: When you inherit from MethodInfo, you must override GetBaseDefinition.
В том то и дело, что я не пойму как вытянуть из MethodInfo DescriptionAttribute — там есть свойство Attributes, но это енум, который отвечает за набор IsAbstract, IsObject и т.д.
Вероятно, не в MethodInfo этот аттрибут лежит, а в каком-то другом классе... но каком?
Здравствуйте, Tiarod, Вы писали:
T> В том то и дело, что я не пойму как вытянуть из MethodInfo DescriptionAttribute — там есть свойство Attributes, но это енум, который отвечает за набор IsAbstract, IsObject и т.д. T>Вероятно, не в MethodInfo этот аттрибут лежит, а в каком-то другом классе... но каком?
Здравствуйте, Mika Soukhov, Вы писали:
MS>Здравствуйте, Tiarod, Вы писали:
T>> В том то и дело, что я не пойму как вытянуть из MethodInfo DescriptionAttribute — там есть свойство Attributes, но это енум, который отвечает за набор IsAbstract, IsObject и т.д. T>>Вероятно, не в MethodInfo этот аттрибут лежит, а в каком-то другом классе... но каком?
MS>GetCustomAttributes
Так:
MethodInfo[] mic = control.GetType().GetMethods();
object[] ob = mic[?].GetCustomAttributes();
?
Ничего не выйдет — только для некоторых MethodInfo из огромной коллекции методов формы установлены Browsable аттрибуты — и больше никаких аттрибутов типа нет
Здравствуйте, Tiarod, Вы писали:
T>Ничего не выйдет — только для некоторых MethodInfo из огромной коллекции методов формы установлены Browsable аттрибуты — и больше никаких аттрибутов типа нет
Значит будет возвращаться пустой массив. В чем проблема то?
Здравствуйте, Mika Soukhov, Вы писали:
MS>Здравствуйте, Tiarod, Вы писали:
T>>Ничего не выйдет — только для некоторых MethodInfo из огромной коллекции методов формы установлены Browsable аттрибуты — и больше никаких аттрибутов типа нет
MS>Значит будет возвращаться пустой массив. В чем проблема то?
Но они же где-то есть? Откуда студия получает подсказку, например, для System.Windows.Forms.Form.Show(), когда показывается "Displays the Control to the user." Вот это и надо вытянуть!
Здравствуйте, Tiarod, Вы писали:
T>Здравствуйте, Mika Soukhov, Вы писали:
MS>>Здравствуйте, Tiarod, Вы писали:
T>>>Ничего не выйдет — только для некоторых MethodInfo из огромной коллекции методов формы установлены Browsable аттрибуты — и больше никаких аттрибутов типа нет
MS>>Значит будет возвращаться пустой массив. В чем проблема то?
T>Но они же где-то есть? Откуда студия получает подсказку, например, для System.Windows.Forms.Form.Show(), когда показывается "Displays the Control to the user." Вот это и надо вытянуть!
Здравствуйте, Tiarod, Вы писали:
T>Здраствуйте! T>Помогите разобраться как получить дескрипшины (DescriptionAttribute) методов заданого типа, плиз, если они указаны, конечно. Или Description метода, указаного через MethodInfo.
Здравствуйте, HotDog, Вы писали:
HD>Здравствуйте, Tiarod, Вы писали:
T>>Здраствуйте! T>>Помогите разобраться как получить дескрипшины (DescriptionAttribute) методов заданого типа, плиз, если они указаны, конечно. Или Description метода, указаного через MethodInfo.
HD>что нить типа этого
[Skipped]
Спасибо за участие
Mika Soukhov уже указал правильное направление.
Здравствуйте, Tiarod, Вы писали:
T>Здраствуйте! T>Помогите разобраться как получить дескрипшины (DescriptionAttribute) методов заданого типа, плиз, если они указаны, конечно. Или Description метода, указаного через MethodInfo.
Вот пример из MSDN. Если что, могу пояснить.
using System;
using System.Reflection;
namespace CustomAttrCS {
// An enumeration of animals. Start at 1 (0 = uninitialized).public enum Animal {
// Pets.
Dog = 1,
Cat,
Bird,
}
// A custom attribute to allow a target to have a pet.public class AnimalTypeAttribute : Attribute {
// The constructor is called when the attribute is set.public AnimalTypeAttribute(Animal pet) {
thePet = pet;
}
// Keep a variable internally ...protected Animal thePet;
// .. and show a copy to the outside world.public Animal Pet {
get { return thePet; }
set { thePet = Pet; }
}
}
// A test class where each method has its own pet.class AnimalTypeTestClass {
[AnimalType(Animal.Dog)]
public void DogMethod() {}
[AnimalType(Animal.Cat)]
public void CatMethod() {}
[AnimalType(Animal.Bird)]
public void BirdMethod() {}
}
class DemoClass {
static void Main(string[] args) {
AnimalTypeTestClass testClass = new AnimalTypeTestClass();
Type type = testClass.GetType();
// Iterate through all the methods of the class.foreach(MethodInfo mInfo in type.GetMethods()) {
// Iterate through all the Attributes for each method.foreach (Attribute attr in
Attribute.GetCustomAttributes(mInfo)) {
// Check for the AnimalType attribute.if (attr.GetType() == typeof(AnimalTypeAttribute))
Console.WriteLine(
"Method {0} has a pet {1} attribute.",
mInfo.Name, ((AnimalTypeAttribute)attr).Pet);
}
}
}
}
}
/*
* Output:
* Method DogMethod has a pet Dog attribute.
* Method CatMethod has a pet Cat attribute.
* Method BirdMethod has a pet Bird attribute.
*/
S>получишь массив атрибутов заданного типа если они есть на методе. Приводишь к нужному типу и пользуешь? Или я не совсем понял проблему?
Для методов, можно сказать, глупо указывать DescriptionAttribute — ведь этот аттрибут показывается только в панели Description студии, но в самом PropertyGrid не показываются методы объекта... потому для методов описываются только xml-комментарии <Summary></Summary>.
Так что Ваш код для стандартных типов всегда будет давать пустой массив... я поздно понял это
Он не будет пустой если на методе есть DescriptionAttribute, так как класс DescriptionAttribute помечен AttributeUsage(AttributeTargets.All), то значит им можно пометить методы. И так же использовать. А уж чьи классы помечены и зачем тут не мне судить. Ты спрашивал как его получить, я ответил. Правильно заданный вопрос — половина ответа.