Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
106 / 18 / 5
Регистрация: 03.04.2012
Сообщений: 219
1

Рефлексия. MemberInfo. GetType(); возвращает не Type this.Day а просто тип MemberInfo

27.11.2013, 12:42. Показов 1845. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не могу разобраться,
у меня в this объявлен объект Day в котором есть метод GetJsonLanguage
я ищу в this свойство Day, нахожу, и хочу в нем найти метод GetJsonLanguage,
Соответственно Type TypePlugin2 = MemberInfo.GetType(); возвращает не Type this.Day а просто тип MemberInfo, в котором описано мое свойство, как сделать так что бы оно возвращало не MemberInfo а объект this.Day который был найден
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
            NamePlugin = "Day";
            Type Type = this.GetType();
            MemberInfo[] MembersInfo = Type.GetMember(NamePlugin);
            foreach (var MemberInfo in MembersInfo)
            {
                  // Ищу GetJsonLanguage
                  Type TypePlugin2 = MemberInfo.GetType();
                    MethodInfo[] mInfo = TypePlugin2.GetMethods();
                    foreach (var Info in mInfo)
                    {
                        if (Info.Name == "GetJsonLanguage")
                        {
                        }
                    }   
            }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.11.2013, 12:42
Ответы с готовыми решениями:

Type.GetType вместо typeof()
Приветствую. Получаю System.Type через typeof(NameClass). Но необходимо получать тип по...

Передать обьект Type, GetType() без описания обьекта в классе
Передать обьект Type, GetType() без описания обьекта в классе Суть такая есть некий класс которому...

Как привести тип Object к тому который даёт GetType() по этому объекту
Всем привет, помогите разобраться. Есть функция которая должна возвращать ссылку на экземпляр...

Как получить тип свойства (рефлексия)
Например у меня есть несколько классов class A { public B _bclass { get { return...

10
438 / 362 / 100
Регистрация: 29.06.2010
Сообщений: 981
Записей в блоге: 1
27.11.2013, 13:04 2
Цитата Сообщение от ibelych Посмотреть сообщение
как сделать так что бы оно возвращало не MemberInfo а объект this.Day который был найден
Никак, но вы можете его вызвать передав объект

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
NamePlugin = "Day";
            Type Type = this.GetType();
            MemberInfo[] MembersInfo = Type.GetMember(NamePlugin);
            foreach (var MemberInfo in MembersInfo)
            {
                // Ищу GetJsonLanguage
                Type TypePlugin2 = MemberInfo.GetType();
                MethodInfo[] mInfo = TypePlugin2.GetMethods();
                foreach (var Info in mInfo)
                {
                    if (Info.Name == "GetJsonLanguage")
                    {
                        Info.Invoke(this, new[] {/*параметры метода*/});
                    }
                }
            }
0
106 / 18 / 5
Регистрация: 03.04.2012
Сообщений: 219
27.11.2013, 13:18  [ТС] 3
C#
1
2
3
4
5
6
7
                foreach (var Info in mInfo)
                {
                    if (Info.Name == "GetJsonLanguage")
                    {
                        Info.Invoke(this, null);
                    }
                }
Не срабатывает, в mInfo нету таких методов
хотя в моем объекте есть этот метод!!!! а те методы которые возвращаются вообще ни каким боком не относятся к моему объекту

Добавлено через 8 минут
вот список тех методов которые возвращаются

get_Name
get_MetadataToken
GetValue
GetRawConstantValue
GetValueDirect
SetValue
SetValueDirect
get_FieldHandle
get_Attributes
get_FieldType
GetRequiredCustomModifiers
GetOptionalCustomModifiers
get_MemberType
get_ReflectedType
get_DeclaringType
get_Module
ToString
GetCustomAttributes
GetCustomAttributes
IsDefined
GetCustomAttributesData
GetObjectData
Equals
GetHashCode
SetValue
get_IsPublic
get_IsPrivate
get_IsFamily
get_IsAssembly
get_IsFamilyAndAssembly
get_IsFamilyOrAssembly
get_IsStatic
get_IsInitOnly
get_IsLiteral
get_IsNotSerialized
get_IsSpecialName
get_IsPinvokeImpl
get_IsSecurityCritical
get_IsSecuritySafeCritical
get_IsSecurityTransparent
get_CustomAttributes
GetType

C#
1
2
3
4
5
6
7
                foreach (var Info in mInfo)
                {
                    if (Info.Name == "GetJsonLanguage")
                    {
                        Info.Invoke(this, null);
                    }
                }
соответственно мне то нужно вызвать этот метод не у this а как бы у this.Day
0
438 / 362 / 100
Регистрация: 29.06.2010
Сообщений: 981
Записей в блоге: 1
27.11.2013, 13:21 4
Вот для примера

Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
private delegate string Do(string s);
 
        [STAThread]
        private static void Main(string[] args)
        {
            var namePlugin = "Day";
 
            var a = new A();
            a.Day = new B();
 
 
            Type type = a.GetType();
            var propertyInfo = type.GetProperty(namePlugin);
            if (propertyInfo != null)
            {
                //Это значение Day
                var obj = propertyInfo.GetValue(a, null);
                // Ищу GetJsonLanguage
                Type typePlugin2 = obj.GetType();
                MethodInfo[] mInfo = typePlugin2.GetMethods();
                foreach (var Info in mInfo)
                {
                    if (Info.Name == "GetJsonLanguage")
                    {
                        var hello = "Hello";
                        var res = Info.Invoke(obj, new[] { hello });
 
                        //Или так
                        var d = Delegate.CreateDelegate(typePlugin2, Info) as Do;
                        res = d(hello);
                    }
                }
            }
            Console.ReadKey();
        }
 
        public class A
        {
            public B Day { get; set; }
        }
        
        public class B
        {
            public string GetJsonLanguage(string e)
            {
                return e;
            }
        }
0
106 / 18 / 5
Регистрация: 03.04.2012
Сообщений: 219
27.11.2013, 13:28  [ТС] 5
один момент
var propertyInfo = Type.GetProperty(NamePlugin);
не пашет так как NamePlugin объявлен в this, а сам this наследуется Form, и GetProperty возвращает все свойства именно Form но не те которые объявил я, а во
MemberInfo[] MembersInfo = Type.GetMember(NamePlugin);

возвращает, но у MemberInfo нет getValue ((((((((((((((((
0
438 / 362 / 100
Регистрация: 29.06.2010
Сообщений: 981
Записей в блоге: 1
27.11.2013, 13:31 6
Цитата Сообщение от ibelych Посмотреть сообщение
я ищу в this свойство Day
Вы ищите свойство. Правильно? Ниже в типе ищется свойство с таким именем и вытаскивается из него значение.

C#
1
2
3
4
5
 var propertyInfo = type.GetProperty(namePlugin);
            if (propertyInfo != null)
            {
                //Это значение Day
                var obj = propertyInfo.GetValue(a, null);
Класс А был сделан для примера, замените переменную а на this.
0
106 / 18 / 5
Регистрация: 03.04.2012
Сообщений: 219
27.11.2013, 13:32  [ТС] 7
C#
1
2
3
Type Type = this.GetType();
var propertyInfo = Type.GetProperty(NamePlugin);
// propertyInfo = null
методы AcceptButton
ActiveMdiChild
AllowTransparency
AutoScale
AutoScaleBaseSize
AutoScroll
AutoSize
AutoSizeMode
AutoValidate
BackColor
FormBorderStyle
CancelButton
ClientSize
ControlBox
DesktopBounds
DesktopLocation
DialogResult
HelpButton
Icon
IsMdiChild
IsMdiContainer
IsRestrictedWindow
KeyPreview
Location
MaximumSize
MainMenuStrip
Margin
Menu
MinimumSize
MaximizeBox
MdiChildren
MdiParent
MergedMenu
MinimizeBox
Modal
Opacity
OwnedForms
Owner
RestoreBounds
RightToLeftLayout
ShowInTaskbar
ShowIcon
Size
SizeGripStyle
StartPosition
TabIndex
TabStop
Text
TopLevel
TopMost
TransparencyKey
WindowState
AutoScaleDimensions
AutoScaleMode
BindingContext
ActiveControl
CurrentAutoScaleDimensions
ParentForm
AutoScrollMargin
AutoScrollPosition
AutoScrollMinSize
DisplayRectangle
HorizontalScroll
VerticalScroll
DockPadding
AccessibilityObject
AccessibleDefaultActionDescription
AccessibleDescription
AccessibleName
AccessibleRole
AllowDrop
Anchor
AutoScrollOffset
LayoutEngine
BackgroundImage
BackgroundImageLayout
Bottom
Bounds
CanFocus
CanSelect
Capture
CausesValidation
ClientRectangle
CompanyName
ContainsFocus
ContextMenu
ContextMenuStrip
Controls
Created
Cursor
DataBindings
IsDisposed
Disposing
Dock
Enabled
Focused
Font
ForeColor
Handle
HasChildren
Height
IsHandleCreated
InvokeRequired
IsAccessible
IsMirrored
Left
Name
Parent
ProductName
ProductVersion
RecreatingHandle
Region
Right
RightToLeft
Site
Tag
Top
TopLevelControl
UseWaitCursor
Visible
Width
WindowTarget
PreferredSize
Padding
ImeMode
Container

получил вот так

C#
1
2
3
4
5
6
            PropertyInfo[] propertyInfo2 = Type.GetProperties();
            string x3 = "";
            foreach (var a in propertyInfo2)
            {
                x3 += a.Name + "/r/n";
            }
0
438 / 362 / 100
Регистрация: 29.06.2010
Сообщений: 981
Записей в блоге: 1
27.11.2013, 13:44 8
Цитата Сообщение от ibelych Посмотреть сообщение
у меня в this объявлен объект Day
Покажите как он объявлен.
0
106 / 18 / 5
Регистрация: 03.04.2012
Сообщений: 219
27.11.2013, 13:46  [ТС] 9
C#
1
2
3
    public partial class MyForm : Form
    {
        public Day Day = new Day();
Вот так
0
438 / 362 / 100
Регистрация: 29.06.2010
Сообщений: 981
Записей в блоге: 1
27.11.2013, 13:53 10
Два варианта

1. Делаете из поля свойство и мой код выше будет работать.
2. Используете вот этот код
C#
1
2
3
4
5
var fieldInfo = type.GetField(namePlugin);
            if (fieldInfo != null)
            {
                //Это значение Day
                var obj = fieldInfo.GetValue(a);
1
106 / 18 / 5
Регистрация: 03.04.2012
Сообщений: 219
27.11.2013, 13:59  [ТС] 11
Огромическое спасибо!)

Добавлено через 28 секунд
громное Спасибо)
0
27.11.2013, 13:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.11.2013, 13:59
Помогаю со студенческими работами здесь

Тип KeyValuePair для Dictionary и рефлексия
Нужно при помощи рефлексии достать из типа Dictionary тип используемого KeyValuePair: public...

Рефлексия. Получить тип элемента массива
Добрый день. Необходимо получить тип элемента массива, для сравнения с существующим типом....

Описать тип TDate — запись с полями целого типа Day, Month и Year
Помогите пожалуйста решить задачу. Описать тип TDate - запись с полями целого типа Day ( день),...

Рефлексия. Узнать, что тип свойства наследуется от ViewModelBase
Вот по-быстрому набросал что-то. Я погуглю ещё, почитаю, но мало ли быстрее кто поможет, не...

Описать тип TDate - запись с полями целого типа Day (день), Month (месяц) и Year (год)
Пожалуйстаю, помогите с задачей! Описать тип TDate - запись с полями целого типа Day (день), Month...

Метод класса возвращает template type
надо создать метод который возвращает значение privat переменных разных типов. например я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru