Получить все поля и методы класса, исключая наследуемые

199
28 ноября 2017, 19:23

Пробовал я сделать так:

type.GetFields(BindingFlags.DeclaredOnly)
type.GetMethods(BindingFlags.DeclaredOnly)

Не возвращает ничего.
Пробую добавить Public, NonPublic, Instance, Static - что-то появилось, но не всё.

type.GetFields(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static)
type.GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static)

Самое странное, что даже вообще без флагов он не возвращает все методы и поля =/

Как получить все, кроме наследуемых? Независимо от модификатора доступа и статичности или нестатичности.

Цель: создать json-объект структуры проекта (массив классов со всеми полями и методами). В последствии этот файл будет применятся другим человеком для рисования диаграммы на web-странице.

Проект учебный, так что смысла в конечной цели искать не стоит.

Ссылка на сам проект для рефлексии: https://github.com/MrModest/Tetris Он вроде небольшой. Если нужны именно какие-то обрывки сюда, то пишите.

Пример класса:

public class Block
{
    public static int Length { get; set; } = 30;
    public static Size Size { get { return new Size(Length, Length); } }
    public static Rectangle GetRect(int hPos, int vPos)
    {
        return new Rectangle(new Point(hPos * Length, vPos * Length), Size);
    }
    public Block(int hPos, int vPos)
    {
        if (hPos < 0 || vPos < 0)
        {
            throw new Exception("Отсчёт позиций (hPos и vPos) идёт с нуля и не может быть отрицательным!");
        }
        this.hPos = hPos;
        this.vPos = vPos;
    }
    public Block(int hPos, int vPos, Color color)
    {
        if (hPos < 0 || vPos < 0)
        {
            throw new Exception("Отсчёт позиций (hPos и vPos) идёт с нуля и не может быть отрицательным!");
        }
        this.hPos = hPos;
        this.vPos = vPos;
        this.Color = color;
    }
    public int hPos { get; set; }
    public int vPos { get; set; }
    public Point LocationPoint { get { return new Point(hPos * Length, vPos * Length); } }
    public Color Color { get; set; } = Color.Gray;
    public Rectangle Rect { get { return new Rectangle(LocationPoint, Size); } }
    public void Draw(Graphics g)
    {
        g.FillRectangle(new SolidBrush(Color), Rect);
        Pen pen = new Pen(Color.Gray, 2);
        pen.Alignment = System.Drawing.Drawing2D.PenAlignment.Inset;
        g.DrawRectangle(pen, Rect);
    }
}

Пример возврата (после пропуска через свои классы упрощения):

{
    "Modifier": "publicMod",
    "Name": "Block",
    "FullName": "Tetris.Block",
    "Namespace": "Tetris",
    "BaseClass": null,
    "Attributes": [],
    "Operations": [{
            "Modifier": "publicMod",
            "ReturnType": "System.Int32",
            "Name": "get_Length",
            "Parameters": [],
            "IsStatic": true,
            "IsAbstract": false,
            "IsVirtual": false
        }, {
            "Modifier": "publicMod",
            "ReturnType": "System.Void",
            "Name": "set_Length",
            "Parameters": [{
                    "Type": "Int32",
                    "Name": "value"
                }
            ],
            "IsStatic": true,
            "IsAbstract": false,
            "IsVirtual": false
        }, {
            "Modifier": "publicMod",
            "ReturnType": "System.Drawing.Size",
            "Name": "get_Size",
            "Parameters": [],
            "IsStatic": true,
            "IsAbstract": false,
            "IsVirtual": false
        }, {
            "Modifier": "publicMod",
            "ReturnType": "System.Drawing.Rectangle",
            "Name": "GetRect",
            "Parameters": [{
                    "Type": "Int32",
                    "Name": "hPos"
                }, {
                    "Type": "Int32",
                    "Name": "vPos"
                }
            ],
            "IsStatic": true,
            "IsAbstract": false,
            "IsVirtual": false
        }, {
            "Modifier": "publicMod",
            "ReturnType": "System.Int32",
            "Name": "get_hPos",
            "Parameters": [],
            "IsStatic": false,
            "IsAbstract": false,
            "IsVirtual": false
        }, {
            "Modifier": "publicMod",
            "ReturnType": "System.Void",
            "Name": "set_hPos",
            "Parameters": [{
                    "Type": "Int32",
                    "Name": "value"
                }
            ],
            "IsStatic": false,
            "IsAbstract": false,
            "IsVirtual": false
        }, {
            "Modifier": "publicMod",
            "ReturnType": "System.Int32",
            "Name": "get_vPos",
            "Parameters": [],
            "IsStatic": false,
            "IsAbstract": false,
            "IsVirtual": false
        }, {
            "Modifier": "publicMod",
            "ReturnType": "System.Void",
            "Name": "set_vPos",
            "Parameters": [{
                    "Type": "Int32",
                    "Name": "value"
                }
            ],
            "IsStatic": false,
            "IsAbstract": false,
            "IsVirtual": false
        }, {
            "Modifier": "publicMod",
            "ReturnType": "System.Drawing.Point",
            "Name": "get_LocationPoint",
            "Parameters": [],
            "IsStatic": false,
            "IsAbstract": false,
            "IsVirtual": false
        }, {
            "Modifier": "publicMod",
            "ReturnType": "System.Drawing.Color",
            "Name": "get_Color",
            "Parameters": [],
            "IsStatic": false,
            "IsAbstract": false,
            "IsVirtual": false
        }, {
            "Modifier": "publicMod",
            "ReturnType": "System.Void",
            "Name": "set_Color",
            "Parameters": [{
                    "Type": "Color",
                    "Name": "value"
                }
            ],
            "IsStatic": false,
            "IsAbstract": false,
            "IsVirtual": false
        }, {
            "Modifier": "publicMod",
            "ReturnType": "System.Drawing.Rectangle",
            "Name": "get_Rect",
            "Parameters": [],
            "IsStatic": false,
            "IsAbstract": false,
            "IsVirtual": false
        }, {
            "Modifier": "publicMod",
            "ReturnType": "System.Void",
            "Name": "Draw",
            "Parameters": [{
                    "Type": "Graphics",
                    "Name": "g"
                }
            ],
            "IsStatic": false,
            "IsAbstract": false,
            "IsVirtual": false
        }, {
            "Modifier": "publicMod",
            "ReturnType": "System.String",
            "Name": "ToString",
            "Parameters": [],
            "IsStatic": false,
            "IsAbstract": false,
            "IsVirtual": true
        }, {
            "Modifier": "publicMod",
            "ReturnType": "System.Boolean",
            "Name": "Equals",
            "Parameters": [{
                    "Type": "Object",
                    "Name": "obj"
                }
            ],
            "IsStatic": false,
            "IsAbstract": false,
            "IsVirtual": true
        }, {
            "Modifier": "publicMod",
            "ReturnType": "System.Int32",
            "Name": "GetHashCode",
            "Parameters": [],
            "IsStatic": false,
            "IsAbstract": false,
            "IsVirtual": true
        }, {
            "Modifier": "publicMod",
            "ReturnType": "System.Type",
            "Name": "GetType",
            "Parameters": [],
            "IsStatic": false,
            "IsAbstract": false,
            "IsVirtual": false
        }
    ],
    "IsInterface": false,
    "IsAbstract": false,
    "IsStatic": false,
    "IsEnum": false,
    "IsSealed": false
}
READ ALSO
AXP288 Как получить напряжение батареи. Windows

AXP288 Как получить напряжение батареи. Windows

Имеется планшет c микросхемой управления питанием AXP288, нужно программно получить напряжение с батареи без использования стандартных драйверов...

259
Как точно определять границы контролов WinForms/WPF

Как точно определять границы контролов WinForms/WPF

WinForms добавляю picturebox а в него круглую картинку, но при этом контейнер остаётся прямоугольнымКогда на picturebox вешаю onClick, то появляются пустые...

169
Самый простой способ получить bitmap с камеры на c#

Самый простой способ получить bitmap с камеры на c#

Единственное, что нашел - это библиотека AFORGEnet с сэмплом SNAPSHOT MAKER

181
Передача данных между страницами Page

Передача данных между страницами Page

Доброго времени суток, ГосподаУ меня есть приложение, которое имеет одно окно, в нем определен Frame контрол, и несколько страниц

172