Как получить Description метода
От: Tiarod Украина  
Дата: 04.03.05 12:23
Оценка:
Здраствуйте!
Помогите разобраться как получить дескрипшины (DescriptionAttribute) методов заданого типа, плиз, если они указаны, конечно. Или Description метода, указаного через MethodInfo.
Re: это ?
От: redrick Россия  
Дата: 04.03.05 14:04
Оценка:
Здравствуйте, 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.

Re[2]: это ?
От: Tiarod Украина  
Дата: 04.03.05 14:26
Оценка:
Здравствуйте, 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 этот аттрибут лежит, а в каком-то другом классе... но каком?
Re[3]: это ?
От: Mika Soukhov Stock#
Дата: 04.03.05 14:32
Оценка:
Здравствуйте, Tiarod, Вы писали:

T> В том то и дело, что я не пойму как вытянуть из MethodInfo DescriptionAttribute — там есть свойство Attributes, но это енум, который отвечает за набор IsAbstract, IsObject и т.д.

T>Вероятно, не в MethodInfo этот аттрибут лежит, а в каком-то другом классе... но каком?

GetCustomAttributes
Re[4]: это ?
От: Tiarod Украина  
Дата: 04.03.05 14:46
Оценка:
Здравствуйте, 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 аттрибуты — и больше никаких аттрибутов типа нет
Re[5]: это ?
От: Mika Soukhov Stock#
Дата: 04.03.05 14:47
Оценка:
Здравствуйте, Tiarod, Вы писали:

T>Ничего не выйдет — только для некоторых MethodInfo из огромной коллекции методов формы установлены Browsable аттрибуты — и больше никаких аттрибутов типа нет


Значит будет возвращаться пустой массив. В чем проблема то?
Re[6]: это ?
От: Tiarod Украина  
Дата: 04.03.05 14:53
Оценка:
Здравствуйте, Mika Soukhov, Вы писали:

MS>Здравствуйте, Tiarod, Вы писали:


T>>Ничего не выйдет — только для некоторых MethodInfo из огромной коллекции методов формы установлены Browsable аттрибуты — и больше никаких аттрибутов типа нет


MS>Значит будет возвращаться пустой массив. В чем проблема то?


Но они же где-то есть? Откуда студия получает подсказку, например, для System.Windows.Forms.Form.Show(), когда показывается "Displays the Control to the user." Вот это и надо вытянуть!
Re[7]: это ?
От: Mika Soukhov Stock#
Дата: 04.03.05 14:58
Оценка:
Здравствуйте, Tiarod, Вы писали:

T>Здравствуйте, Mika Soukhov, Вы писали:


MS>>Здравствуйте, Tiarod, Вы писали:


T>>>Ничего не выйдет — только для некоторых MethodInfo из огромной коллекции методов формы установлены Browsable аттрибуты — и больше никаких аттрибутов типа нет


MS>>Значит будет возвращаться пустой массив. В чем проблема то?


T>Но они же где-то есть? Откуда студия получает подсказку, например, для System.Windows.Forms.Form.Show(), когда показывается "Displays the Control to the user." Вот это и надо вытянуть!


=) Это же Xml комментарии. Ищи в поиске
Re[8]: это ?
От: Tiarod Украина  
Дата: 04.03.05 15:03
Оценка:
Здравствуйте, Mika Soukhov, Вы писали:

MS>Здравствуйте, Tiarod, Вы писали:


MS>=) Это же Xml комментарии. Ищи в поиске


Пятница...
Re: Как получить Description метода
От: HotDog Швейцария www.denebspace.com
Дата: 04.03.05 15:03
Оценка:
Здравствуйте, Tiarod, Вы писали:

T>Здраствуйте!

T>Помогите разобраться как получить дескрипшины (DescriptionAttribute) методов заданого типа, плиз, если они указаны, конечно. Или Description метода, указаного через MethodInfo.


что нить типа этого


        private string GetDescription(object value)
        {
            FieldInfo fi= value.GetType().GetField(value.ToString()); 
        
            DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes
                (typeof(DescriptionAttribute), false);
        
            return (attributes.Length>0)?attributes[0].Description:value.ToString();
        }
Re[2]: Как получить Description метода
От: Tiarod Украина  
Дата: 04.03.05 15:10
Оценка:
Здравствуйте, HotDog, Вы писали:

HD>Здравствуйте, Tiarod, Вы писали:


T>>Здраствуйте!

T>>Помогите разобраться как получить дескрипшины (DescriptionAttribute) методов заданого типа, плиз, если они указаны, конечно. Или Description метода, указаного через MethodInfo.


HD>что нить типа этого


[Skipped]

Спасибо за участие
Mika Soukhov уже указал правильное направление.
Re: Как получить Description метода
От: thilorn Украина  
Дата: 04.03.05 15:11
Оценка:
Здравствуйте, 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.
 */
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Re: Как получить Description метода
От: Syffest Россия  
Дата: 04.03.05 15:13
Оценка:
Ну будет у тебя что-то типа



object[] attributes = methodInfo.GetCustomAttributes( typeof(DescriptionAttribute), [true|false])


получишь массив атрибутов заданного типа если они есть на методе. Приводишь к нужному типу и пользуешь? Или я не совсем понял проблему?
Re[2]: Как получить Description метода
От: Tiarod Украина  
Дата: 04.03.05 15:45
Оценка:
Здравствуйте, Syffest, Вы писали:

S>Ну будет у тебя что-то типа



S>

S>object[] attributes = methodInfo.GetCustomAttributes( typeof(DescriptionAttribute), [true|false])

S>


S>получишь массив атрибутов заданного типа если они есть на методе. Приводишь к нужному типу и пользуешь? Или я не совсем понял проблему?


Для методов, можно сказать, глупо указывать DescriptionAttribute — ведь этот аттрибут показывается только в панели Description студии, но в самом PropertyGrid не показываются методы объекта... потому для методов описываются только xml-комментарии <Summary></Summary>.
Так что Ваш код для стандартных типов всегда будет давать пустой массив... я поздно понял это
Re[3]: Как получить Description метода
От: Syffest Россия  
Дата: 04.03.05 16:17
Оценка:
Он не будет пустой если на методе есть DescriptionAttribute, так как класс DescriptionAttribute помечен AttributeUsage(AttributeTargets.All), то значит им можно пометить методы. И так же использовать. А уж чьи классы помечены и зачем тут не мне судить. Ты спрашивал как его получить, я ответил. Правильно заданный вопрос — половина ответа.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.