关于控制及其访问修饰符

时间:2012-03-13 07:09:49

标签: c# asp.net

我总是看到无论何时我们在设计界面上拖动任何控件,它的访问修饰符都会受到保护....为什么它默认受到保护...为什么不是私有或公共。

我从少数人那里得到的答案很少

1)因为我们知道受保护的访问修饰符的范围,受保护的成员可以从声明它的类中访问,也可以从派生自声明该成员的类派生的任何类中访问。我们知道每个.net控件都是一个类。 仅当通过派生类类型进行访问时,才能在派生类中访问基类的受保护成员。

2)由于代码隐藏和aspx.cs文件之间的继承,它受到保护。如果您不希望它被继承,您可以将其设为私有或密封

3)我认为你指向正确的方向....你会发现一个示例代码,只是为了显示aspx和后面的代码之间的关系以及保护修饰符的使用,这很重要。

没有回答详细说明。所以请详细告诉我什么样的关系,因此任何控件的访问修饰符都受到保护?

1 个答案:

答案 0 :(得分:1)

通常,当ASP.NET编译aspx页面时,生成的页面类继承自代码隐藏类。实例化实际控件并构建控件树的代码驻留在生成的类中。由于这种关系,设计者默认将protected范围分配给在designer.cs文件中声明的控制变量(与代码隐藏类基本相同)。由于受保护的范围,这些变量可以在实际的页面类(由ASP.NET编译器生成)中访问,因此页面类代码实际上可以初始化它们以纠正控件实例。

公共范围也可以工作,但它违反了封装,因为通常不需要在页面类的旁边引用页面上的控件实例。 private范围不起作用,因为它意味着控制变量只能在代码隐藏类中访问,因此,页面类(从代码隐藏类派生)不能将变量设置为控件实例。在这种情况下,您会发现控制变量在代码隐藏类中将具有空值。