Динамическое создание класса в C#

Действительно ли возможно во времени выполнения создать класс из DataTable, где ColumnName будет свойствами динамического класса?

5
задан thndrkiss 15 January 2016 в 08:11
поделиться

4 ответа

Да (с использованием Reflection.Emit), но это плохая идея.
Что вы пытаетесь сделать?

1
ответ дан 14 December 2019 в 08:45
поделиться

Читая ваши комментарии, я понимаю, что вы имеете в виду. Просто используйте Generics: использование полей списка для создания объектов. код довольно прост:

public class DynClass<T, P>
    {
        public DynClass()
        {
            _fields = new Dictionary<T, P>();
        }

        private IDictionary<T, P> _fields;

        public IDictionary<T, P> Fields
        {
            get { return _fields; }
        }

    }

    public class TestGenericInstances
    {
        public TestGenericInstances()
        {
            Client cli = new Client("Ash", "99999999901");

            /* Here you can create any instances of the Class. 
             * Also DynClass<string, object>
             * */
            DynClass<string, Client> gen = new DynClass<string, Client>();

            /* Add the fields
             * */
            gen.Fields.Add("clientName", cli);

            /* Add the objects to the List
             * */
            List<object> lstDyn = new List<object>().Add(gen);
        }        
    }
1
ответ дан 14 December 2019 в 08:45
поделиться

Если у вас C # 4, вы можете использовать новую динамическую функцию и ExpandoObject . Вы можете прочитать руководство по этому поводу здесь .

1
ответ дан 14 December 2019 в 08:45
поделиться

С C # 4 вы можете сделать это

dynamic foo = new ExpandoObject();

// mimic grabbing a column name at runtime and adding it as a property
((IDictionary<string, object>)foo).Add("Name", "Apple");

Console.WriteLine(foo.Name); // writes Apple to screen

Не рекомендовать это или что-то в этом роде, но он показывает вам, что это возможно.

4
ответ дан 14 December 2019 в 08:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: