2014-09-10 5 views
1

Я не уверен, что то, что я хочу сделать, возможно, но я решил, что спрошу.Как изменить значение атрибута DefaultValue в подклассе

У меня есть абстрактный базовый класс, который имеет свойство, которое украшено с атрибутом DefaultValue, например, так:

public abstract MyBaseClass { 

    [DefaultValue("some value")] 
    public string StringProperty { 
     get { return iStringProperty; } 
     set { iStringProperty = value; 
    } 
    protected string iStringProperty = "some value"; 

    // Other code here 
} 

Я хочу, чтобы получить класс ребенка от MyBaseClass, но я хочу, значение атрибута DefaultValue , а также значение по умолчанию для свойства, должны быть разными. С этой целью я добавил конструктор по умолчанию для дочернего класса, а именно:

public class MyChildClass : MyBaseClass { 

    // Type specific properties & fields here 

    public MyChildClass() 
     : base() { 
     iStringProperty = "new value"; 
    } 

    // Other code here 
} 

Как изменить значение атрибута DefaultValue в производном классе, так что это «новое значение»?

+0

Вы не можете изменить значение атрибута во время выполнения, поэтому то, что вы пытаетесь, невозможно. – Hammerstein

+0

Это не нужно делать во время выполнения. –

ответ

3

Если ваше имущество является виртуальным, вы можете его переопределить и применить для него DefaultValue.

[DefaultValue("new value")] 
public override string StringProperty 
{ 
    get { return iStringProperty; } 
    set { iStringProperty = value;} 
} 

Если нет, то вам нужно затенять свойство с new ключевого слова и применить новые DefaultValue

[DefaultValue("new value")] 
public new string StringProperty 
{ 
    get { return iStringProperty; } 
    set { iStringProperty = value;} 
} 

В обоих случаях вам не нужно, чтобы обеспечить новую реализацию. Вы можете делегировать вызов base.StringProperty;

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