在C#中为虚拟属性添加一个setter
发布时间:2020-12-15 06:47:35 所属栏目:百科 来源:网络整理
导读:我有这样的情况: public abstract class BaseClass { public abstract string MyProp { get; }} 现在,对于某些派生类,属性值是一个合成值,所以没有setter: public class Derived1 : BaseClass{ public override string MyProp { get { return "no backing
我有这样的情况:
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’没有可覆盖的集合访问器 如何让这个工作? 解决方法
你可以做的最好的事情是实现属性为虚拟而不是抽象.在基类中为每个抛出的NotSupportedException引发get和set块,并在派生类中相应地覆盖该行为:
public virtual string MyProp { get { throw new NotSupportedException(); } set { throw new NotSupportedException(); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |