受保护的成员对用户可见

时间:2012-08-11 14:47:57

标签: c# .net winforms protected access-modifiers

这将是我的第一个问题所以请宽容。

这怎么可能:

//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继承?

2 个答案:

答案 0 :(得分:4)

protected internal表示受保护的OR内部。允许从派生类或包含程序集访问。

Access Modifiers (C# Programming Guide)

  

受保护的内部
  类型或成员可以由声明它的程序集中的任何代码访问,也可以从另一个程序集中的派生类中访问。来自另一个程序集的访问必须在一个类声明中进行,该声明派生自声明受保护的内部元素的类,并且它必须通过派生类类型的实例进行。

答案 1 :(得分:2)

Adapter属性声明为protected internal,这意味着派生类(protected可以访问同一程序集中的类({ {1}})。由于internalForm1位于同一个程序集中,因此他们可以访问彼此的内部成员。