新关键字的奇怪用法
本文关键字:用法 关键字 | 更新日期: 2023-09-27 18:08:19
所以我在。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;
}
}
为什么在public之后使用新的关键字?它是做什么的?这叫什么?
你给出的两个例子都是一样的。"new"意味着你有一个同名的成员,但是你用一个新的实现隐藏了它。
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"answers"override"之间的区别
编辑:正如@jafar所说,在派生类上省略new也没有错。使用new只告诉编译器我们想隐藏基类成员。