【发布时间】:2009-08-04 12:26:16
【问题描述】:
在一个基类中我有这个属性:
public virtual string Text
{
get { return text; }
}
我想覆盖它并返回不同的文本,但我也希望能够设置文本,所以我这样做了:
public override string Text
{
get { return differentText; }
set { differentText = value; }
}
但这不起作用。我在set 下得到一个红色波浪线,说我无法覆盖,因为它没有设置访问器。为什么这是个问题?我该怎么办?
【问题讨论】:
-
我也想做同样的事情。应该可以的。
-
有可能,但需要“中产阶级”。此外,在许多情况下这可能不是一个好主意,但也有一些例外,例如在覆盖抽象属性时。基地:
public abstract string Text { get; }。中间(继承基):protected internal string text;public sealed override string Text { get { return text; } }。孩子(继承中间):public new string Text { get { return text; } set { text = value; } }。受保护的内部修饰符和密封的覆盖确保封装不会在您的程序集之外被破坏。 -
@AnorZaken:这不是压倒一切,而是遮蔽。它也不需要“中产”阶级。
-
@Guffa 它既是覆盖又是阴影,由于 c# 不允许两者在同一个类中,所以需要中间类 。
-
@AnorZaken:不能两者兼有,阴影不是压倒一切的。在中间类中覆盖它不会使其在子类中被覆盖,它仍然是阴影。
标签: c# inheritance properties accessor