2011-03-22 67 views
2

当我从一个类如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并不在我的派生导致错误类。

+0

@乔恩嗯,我半开玩笑地。如果我能提供合理的答案,我会的。要求人们接受答案有什么不对?如果没有别的不是,只是接受一个答案,只是说“谢谢”而已。 – Pete 2011-03-22 14:44:54

+0

@Pete:这不是一个礼貌的问题。有时候你可以提出问题,而不能在一段时间内应用或研究答案。在其他时候,您的项目中还有其他事情发生了变化,问题和答案不再相关。如果有人想表示感谢,他们可以发表评论。 – 2011-03-22 14:57:01

+0

@Pete:我个人认为这看起来很粗鲁。我认为,如果有交换条件,你似乎只对帮助别人感兴趣。我觉得SO的主要目标应该是帮助人们,而不是积累可接受的答案。 – 2011-03-22 14:59:06

回答

3

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

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

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

0

我想建议你做多态和继承在C#中的一些研究。下面是MSDN网站上的一个链接,以便您开始使用http://msdn.microsoft.com/en-us/library/ms173149.aspx

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

其结果是,当MyClass的实例化和使用,所有公共方法和两个按钮的属性,并且MyClass的是用于访问。