所以我在.NET源代码中挖掘,并遇到了一个非常奇怪的部分。这是代码:
public new Point AutoScrollPosition
{
get
{
return base.AutoScrollPosition;
}
set
{
base.AutoScrollPosition = value;
}
}
还有:
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
new public event EventHandler AutoSizeChanged
{
add
{
base.AutoSizeChanged += value;
}
remove
{
base.AutoSizeChanged -= value;
}
}
为什么新的关键字在公开后使用?它有什么作用?这叫什么?
答案 0 :(得分:3)
您提供的两个示例都是相同的。 "新"表示您拥有相同名称的成员,但您使用新实现隐藏它。
class A
{
public string Member { get { return "A"; } }
}
class B : A
{
public new string Member { get { return "B"; } }
}
A realA = new A();
B realB = new B();
A fakeA = new B();
Console.WriteLine(realA.Member); // Prints "A"
Console.WriteLine(realB.Member); // Prints "B", Only way to print "B" is to be a B and not casted to anything (real B)
Console.WriteLine(fakeA.Member); // Prints "A"
Console.WriteLine((realB as A).Member); // Prints "A", here we won't see hidden members
你只需要了解" new"之间的区别。和"覆盖"
编辑:正如@jafar所说,在派生类上省略new也没有错。使用new只告诉编译器我们要隐藏基类成员。