这将是我的第一个问题所以请宽容。
这怎么可能:
//there is a Form1 class which has a TableAdapter member generated by designer...
partial class Form1
{
private void InitializeComponent()
{
this.SomeTableTableAdapter = new SomeDatabaseDataSetTableAdapters.SomeTableTableAdapter();
}
private SomeDatabaseDataSetTableAdapters.SomeTableTableAdapter SomeTableTableAdapter;
}
//here is this TableAdapter class
//It has PROTECTED member called "Adapter"
public partial class SomeTableTableAdapter : global::System.ComponentModel.Component
{
protected internal global::System.Data.SqlClient.SqlDataAdapter Adapter
{
}
}
//and in the constructor of Form1 class I can do something like this:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.SomeTableTableAdapter.Adapter.InsertCommand.CommandText = @"INSERT INTO (...)";
}
}
为什么我可以访问受保护的成员,因为Form1不从SomeTableTableAdapter继承?
答案 0 :(得分:4)
protected internal
表示受保护的OR内部。允许从派生类或包含程序集访问。
Access Modifiers (C# Programming Guide):
受保护的内部
类型或成员可以由声明它的程序集中的任何代码访问,也可以从另一个程序集中的派生类中访问。来自另一个程序集的访问必须在一个类声明中进行,该声明派生自声明受保护的内部元素的类,并且它必须通过派生类类型的实例进行。
答案 1 :(得分:2)
Adapter
属性声明为protected internal
,这意味着派生类(protected
)和可以访问同一程序集中的类({ {1}})。由于internal
与Form1
位于同一个程序集中,因此他们可以访问彼此的内部成员。