当我从Button
这样的类继承时,Button
的属性如何在派生类中起作用? Button
的私有字段不是在我的派生类中继承的,但是属性是否仍然需要仍然存在,以便公共属性可以访问内部私有状态?例如,Location
属性如何在以下示例中起作用?
public class MyClass : Button
{
MyClass()
{
this.Location = new System.Drawing.Point(134, 34);
}
}
在.NET源代码中,我看到Location
实现为:
public Point Location
{
get
{
return new Point(this.x, this.y); // x is a private field
}
set
{
this.SetBounds(value.X, value.Y,
this.width, this.height,
BoundsSpecified.Location);
}
}
我不明白为什么访问this.x
和this.y
不会导致我的派生类出错。
答案 0 :(得分:3)
私有只是防止编译时从外部直接访问代码。实际上,通过反思可以直接访问私人领域。
因此私有字段 由派生类继承,但不能直接访问它们。
这意味着定义类可以控制对它们的访问,并确保它们没有设置为无效值,或者在完成更改时需要完成的任何工作,但派生类仍然可以使用它们用于实施受保护和公共成员的方式。
答案 1 :(得分:0)
我建议你做一些关于C#中多态和继承的研究。这是MSDN网站上的一个链接,可以帮助您入门http://msdn.microsoft.com/en-us/library/ms173149.aspx
简而言之,当您从父类继承Button时,Button的私有成员仍然可以在父类中访问和使用,它们不会被覆盖或消失。例如,在派生类MyClass中,Button的所有私有成员都不能直接访问(尽管可以通过反射访问它们)。但是,Button的任何公共或受保护成员都可以在MyClass中访问。
因此,当实例化和使用MyClass时,可以使用Button和MyClass的所有公共方法和属性。