Как вызвать метод класса, который я инициализировал как объект? - PullRequest
0 голосов
/ 13 октября 2019

Код, в котором я инициализировал класс

PropertyInfo[] props = typeof(TObj).GetProperties();
            foreach (PropertyInfo prop in props)
            {
                var sourceAttrs = prop.GetCustomAttribute<Reference>();
                if (sourceAttrs != null)
                {
                    Type entityType = sourceAttrs.ReferenceType;
                    Type openGenericType = typeof(LinkedEntityProvider<,>);
                    Type closedGenericType = openGenericType.MakeGenericType(typeof(TObj), entityType);
                    object instanceLinkedEntityProvider = Activator.CreateInstance(closedGenericType, new object[] { Database, prop });

                }
            }

Мне нужно вызвать метод instanceLinkedEntityProvider. Возможно ли это сделать?

1 Ответ

0 голосов
/ 13 октября 2019

Может быть через приведение типа

(LinkedEntityProvider)instanceLinkedEntityProvider.MyMethod();

или с помощью ключевого слова dynamic

dynamic instanceLinkedEntityProvider = Activator.CreateInstance(closedGenericType, new object[] { Database, prop });
instanceLinkedEntityProvider.MyMethod(); //throws exception if method doesn't exist at run-time

, которое обходит проверки во время компиляции.

Или даже черездалее Reflection, где вы анализируете все методы в только что созданном объекте, используя метод GetMethod класса Type.

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