私有字段如何在派生类中工作?

时间:2011-03-22 14:24:30

标签: .net inheritance

当我从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.xthis.y不会导致我的派生类出错。

2 个答案:

答案 0 :(得分:3)

私有只是防止编译时从外部直接访问代码。实际上,通过反思可以直接访问私人领域。

因此私有字段 由派生类继承,但不能直接访问它们。

这意味着定义类可以控制对它们的访问,并确保它们没有设置为无效值,或者在完成更改时需要完成的任何工作,但派生类仍然可以使用它们用于实施受保护和公共成员的方式。

答案 1 :(得分:0)

我建议你做一些关于C#中多态和继承的研究。这是MSDN网站上的一个链接,可以帮助您入门http://msdn.microsoft.com/en-us/library/ms173149.aspx

简而言之,当您从父类继承Button时,Button的私有成员仍然可以在父类中访问和使用,它们不会被覆盖或消失。例如,在派生类MyClass中,Button的所有私有成员都不能直接访问(尽管可以通过反射访问它们)。但是,Button的任何公共或受保护成员都可以在MyClass中访问。

因此,当实例化和使用MyClass时,可以使用Button和MyClass的所有公共方法和属性。