Динамическая генерация класса (Emit). Как это делается?
От: BKnight Россия  
Дата: 06.11.07 11:29
Оценка:
Народ, кто работал с динамической генерацией кода, подскажите плз! Надо сделать "сборный" класс, который содержит свойства для получения значений свойств из заданных классов.

Например есть такое:
internal class A
{
    private Dictionary<string, object> _dictionary = new Dictionary<string, object>();
    // В эту коллекцию где-нить заносятся данные. типа того:
    // _dictionary["number"] = 1;
    // _dictionary["str"] = "some string";

    public string SomeProperty
    {
        get { return "Hello, world!"; }
    }

    public Dictionary<string,object> SomeOtherProperty
    {
        get { return _dictionary; }
    }
}


Как сгенерировать класс B по классу A наподобие этого:
internal class B
{
    private A _a;

    public string SomeProperty
    {
        get { return _a.SomeProperty; }
    }


    public int number
    {
        get { return (int)_a.SomeOtherProperty["number"]; }
    }

    public string str
    {
        get { return (string)_a.SomeOtherProperty["str"]; }
    }
}


Подскажите, плз.

з.ы. Emit'ом пользоваться не очень умею, посиму, ответа "копай в сторону emit" просьба не давать...
Re: Динамическая генерация класса (Emit). Как это делается?
От: Плюш  
Дата: 06.11.07 13:39
Оценка:
Здравствуйте, BKnight, Вы писали:

BK>Народ, кто работал с динамической генерацией кода, подскажите плз! Надо сделать "сборный" класс, который содержит свойства для получения значений свойств из заданных классов.


BK>Например есть такое:

BK>
BK>internal class A
BK>{
BK>    private Dictionary<string, object> _dictionary = new Dictionary<string, object>();
BK>    // В эту коллекцию где-нить заносятся данные. типа того:
BK>    // _dictionary["number"] = 1;
BK>    // _dictionary["str"] = "some string";

BK>    public string SomeProperty
BK>    {
BK>        get { return "Hello, world!"; }
BK>    }

BK>    public Dictionary<string,object> SomeOtherProperty
BK>    {
BK>        get { return _dictionary; }
BK>    }
BK>}
BK>


BK>Как сгенерировать класс B по классу A наподобие этого:

BK>
BK>internal class B
BK>{
BK>    private A _a;

BK>    public string SomeProperty
BK>    {
BK>        get { return _a.SomeProperty; }
BK>    }

BK>
BK>    public int number
BK>    {
BK>        get { return (int)_a.SomeOtherProperty["number"]; }
BK>    }

BK>    public string str
BK>    {
BK>        get { return (string)_a.SomeOtherProperty["str"]; }
BK>    }
BK>}
BK>


BK>Подскажите, плз.


BK>з.ы. Emit'ом пользоваться не очень умею, посиму, ответа "копай в сторону emit" просьба не давать...


Посмотри класс CSharpCodeProvider. Он создает сборки на основе текста
Re[2]: Динамическая генерация класса (Emit). Как это делаетс
От: _FRED_ Черногория
Дата: 06.11.07 13:48
Оценка:
Здравствуйте, Плюш, Вы писали:

П>Посмотри класс CSharpCodeProvider. Он создает сборки на основе текста


Помни об оверквотинге и мерах к нарушителям
Help will always be given at Hogwarts to those who ask for it.
Re[3]: Динамическая генерация класса (Emit). Как это делаетс
От: Плюш  
Дата: 06.11.07 14:33
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Помни об оверквотинге и мерах к нарушителям


Спасибо.
В предь буду внимательнее и осторожнее
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.