我有一个需求,其中有许多类都派生自同一个基类。基类包含了派生自同一基类的子类列表。
所有类都需要能够获取特定值,这些值可以从类本身或其父类中获取,具体取决于派生类是什么。
我考虑使用方法而不是属性,但我还希望将这些值提供给.NET报表组件,该组件直接访问报表引擎中公开的公共属性,因此这排除了使用方法的可能性。
我的问题是,在没有在BaseClass中公开setter的情况下,如何在DerivedClass中实现setter的最佳实践方法。
其他建议?
所有类都需要能够获取特定值,这些值可以从类本身或其父类中获取,具体取决于派生类是什么。
我考虑使用方法而不是属性,但我还希望将这些值提供给.NET报表组件,该组件直接访问报表引擎中公开的公共属性,因此这排除了使用方法的可能性。
我的问题是,在没有在BaseClass中公开setter的情况下,如何在DerivedClass中实现setter的最佳实践方法。
public class BaseClass
{
private BaseClass _Parent;
public virtual decimal Result
{
get { return ((_Parent != null) ? _Parent.Result : -1); }
}
}
public class DerivedClass : BaseClass
{
private decimal _Result;
public override decimal Result
{
get { return _Result; }
// I can't use a setter here because there is no set method in the base class so this throws a build error
//set { _Result = value; }
}
}
由于我无法更改DerivedClass中的访问修饰符,因此无法在BaseClass中添加受保护的setter(如下所示)。
public class BaseClass
{
private BaseClass _Parent;
public virtual decimal Result {
get { return ((_Parent != null) ? _Parent.Result : -1); }
protected set { }
}
}
public class DerivedClass : BaseClass
{
private decimal _Result;
public override decimal Result
{
get { return _Result; }
// This setter throws a build error because of a change of access modifiers.
//set { _Result = value; }
}
}
我不想在BaseClass中添加一个带有setter的成员变量,因为我不希望从BaseClass或其他继承自基类的类中设置属性的能力。
public class BaseClass
{
private BaseClass _Parent;
protected Decimal _Result; // This could result in a lot of unnecessary members in BaseClass.
public virtual decimal Result {
get { return _Result; }
// Empty setter ahead :) This does nothing.
// I could also throw an exception here but then issues would not be found until runtime
// and could cause confusion in the future with new developers etc.
set { }
}
}
public class DerivedClass : BaseClass
{
public override decimal Result
{
get { return base.Result; }
set { base._Result = value; }
}
}
其他建议?