C# Как получить все поля определенного типа c из производного класса в базовом классе? - PullRequest
2 голосов
/ 10 марта 2020

У меня есть класс, который выглядит следующим образом:

public abstract class NetBehaviour
{
    void setSyncFloat (SyncFloat[] values)
    {
        // Find all SyncFloat fields in the child 
        // class (the one that derived this class).

    }
}

Как мне go найти все поля указанного типа c в классе, производном от этого класса в этом самом учебный класс? Это кажется немного сложным, и я думаю, мне понадобятся размышления. Кто-нибудь может мне помочь?

Ответы [ 2 ]

1 голос
/ 10 марта 2020

Вы на правильном пути.
Радостно this в вашем классе также будет производного типа, что позволит вам сделать this.GetType(), чтобы получить явный наиболее производный Type объекта.
Затем вы можете использовать Type.GetFields() для получения массива всех полей этого типа, который вы можете перебирать.

1 голос
/ 10 марта 2020
public abstract class NetBehaviour
{
    void setSyncFloat (SyncFloat[] values)
    {
        // Find all SyncFloat fields in the child 
        // class (the one that derived this class).
        var fields = GetType()
            .GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public)
            .Where(fi => fi.FieldType == typeof(SyncFloat));
    }
}

BindingFlags были включены, потому что я предполагаю, что вам нужны закрытые поля.

Обратите внимание, что GetType() получит тип среды выполнения, то есть тип подкласса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...