2012-03-28 4 views
0

Я ищу способ изменить/добавить accessors к свойствам данного класса во время выполнения. Пример кода ниже, работает на .ctor класса, я хочу, чтобы добавить 'TheSetMethod', чтобы «установить» аксессуар каждого «поля», поэтому, изменив поле во время выполнения. FYI: За этим стоит ограничение реализации, из-за чего я делаю это таким образом, используя стандартный «get; set»; предков, поэтому я не могу «получить, установить»; во время разработки.Как изменить свойство accessors во время выполнения

public string field1; 

    .ctor() 
    { 
     Type typeWebConfig = this.GetType(); 
     MemberInfo[] Fields = typeWebConfig.GetMembers(BindingFlags.Public | 
           BindingFlags.Instance); 
     foreach(MemberInfo member in Fields) 
      if(member.MemberType == MemberTypes.Field) 
      { 
       FieldInfo field = (FieldInfo)member; 
       //add a delegate method to field's 'SET' 
      } 
    } 

    void TheSetMethod(string propName) 
    { 
    } 

любая помощь будет оценена по достоинству. Cheers

+3

Вы путаете C# с динамическим языком? –

+1

, так что если класс использует другой класс, и вдруг используемый класс изменит его accessors, как первый класс справится с ним? –

+0

Спасибо за комментарии, но я очень ценю, если вы действительно помогаете :) – Afshin

ответ

0

Вы можете реализовать пользовательский тип DynamicObject, чтобы обращаться с аксессуарами вручную. Это будет работать только в .NET 4+.

+0

Спасибо, М.Бабкок, единственное, что мешает мне использовать DynamicObject (хотя это действительно полезно), так это то, что у нас нет времени на время разработки, что действительно важно. если я не получу то, что вы имеете в виду? – Afshin

+1

Вы правы, это потеряет intellisense, так как ваш экземпляр должен быть доступен через 'dynamic'. Хотя я, кажется, помню, что есть расширение VS, которое сделает работу intellisense (я не помню, к сожалению). –

-1

Почему бы просто не добавить код в сеттеры для начала, а затем использовать переменную, чтобы определить, должен ли код выполняться или нет? По-моему, это плохой дизайн, так как «Динамический» сеттера также кажется, что он не сможет быть испытан очень хорошо.

+0

простой ответ - «конструктивные ограничения». – Afshin

Смежные вопросы