当我分配或检索值时,是否可以忽略set和get?
具体来说,我是从一个具有如下声明的属性的类继承的:
virtual public Int32 Value { get; set; }
我想做的是覆盖它并在那些设置和获取中做一些有用的事情。当我覆盖它时出现问题,我还必须手动分配,或从属性返回值。如果我做这样的事情:
override public Int32 Value
{
get
{
return this.Value;
}
set
{
this.Value = value;
// do something useful
}
然后我创造了一个无限循环。有没有办法在不调用set和get中的代码的情况下设置或获取值,或者我是否必须为实际变量创建单独的名称?
答案 0 :(得分:6)
您应该使用this.Value
,而不是使用base.Value
。这将检索/设置基类中的属性。
请注意,基本方法实际上必须是可覆盖的(virtual
或abstract
);在你的例子中,它不是。如果基本方法不是虚拟的,那么当您尝试在派生类中重写时,您将只会遇到编译器错误。
答案 1 :(得分:1)
您所关注的关键字是base
,documented here。这会强制编译器将属性引用解析为基类中定义的属性引用。 VB.NET等效项是MyBase。
因此:
get
{
return base.Value;
}
set
{
base.Value = value;
// do something useful
}