代码之家  ›  专栏  ›  技术社区  ›  James Curran

在C中向虚拟属性添加setter#

  •  9
  • James Curran  · 技术社区  · 14 年前

    我遇到这样的情况:

    public abstract class BaseClass 
    {
       public abstract string MyProp { get; }
    }
    

    现在,对于某些派生类,属性值是合成值,因此没有setter:

    public class Derived1 : BaseClass
    {
        public override string MyProp { get { return "no backing store"; } }
    }
    

    这个很好用。然而,一些派生类需要更传统的后备存储。但是,无论我如何编写它,比如在自动属性上,或者使用显式的后备存储,我都会得到一个错误:

    public class Derived2 : BaseClass
    {
        public override string MyProp { get; private set;}
    }
    
    public class Derived3 : BaseClass
    {
        private string myProp;
        public override string MyProp 
        { 
            get { return myProp;} 
            private set { myProp = value;}
        }
    }
    

    derived2.myprop.set:无法重写,因为“baseclass.myprop”没有可重写的set访问器

    4 回复  |  直到 11 年前
        1
  •  10
  •   Bradley Smith    14 年前

    virtual abstract get set NotSupportedException

    public virtual string MyProp {
        get {
            throw new NotSupportedException();
        }
        set {
            throw new NotSupportedException();
        }
    }
    
        2
  •  3
  •   EMP    14 年前

    protected

        3
  •  0
  •   Steven    14 年前

    public class Root
    {
        private string _MyProp;
        public string MyProp 
        {
            get { return _MyProp;}
            set { _MyProp = SetMyProp(value); }
        }
        protected virtual string SetMyProp(string suggestedValue)
        {
            return suggestedValue;
        }
    }
    public class Child
        : Root
    {
        protected override string SetMyProp(string suggestedValue)
        {
            string oReturn = base.SetMyProp(suggestedValue);
            // Do some sort of cleanup here?
            return oReturn;
        }
    }
    

        4
  •  0
  •   supercat    11 年前