Protected member visible for user

2019-07-12 20:46发布

It will be my first question here so please be lenient.

How is this possible:

//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 (...)";
    }
}

How come I get access to protected member since Form1 do not inherit from SomeTableTableAdapter?

2条回答
欢心
2楼-- · 2019-07-12 21:20

protected internal means protected OR internal. Access is allowed either from derived classes or from the containing assembly.

Access Modifiers (C# Programming Guide):

protected internal
The type or member can be accessed by any code in the assembly in which it is declared, or from within a derived class in another assembly. Access from another assembly must take place within a class declaration that derives from the class in which the protected internal element is declared, and it must take place through an instance of the derived class type.

查看更多
兄弟一词,经得起流年.
3楼-- · 2019-07-12 21:25

The Adapter property is declared as protected internal, which means it is accessible to derived classes (protected) and to classes in the same assembly (internal). Since Form1 is in the same assembly as SomeTableTableAdapter, they can access each other's internal members.

查看更多
登录 后发表回答