保护成员的用户可见(Protected member visible for user)

2019-09-21 03:36发布

这将是我在这里的第一个问题,请手下留情。

这怎么可能:

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

Answer 1:

Adapter属性声明为protected internal ,这意味着它是派生类(可访问的protected ),并在相同的组件(类internal )。 由于Form1是在同一组件SomeTableTableAdapter ,他们可以访问彼此的内部构件。



Answer 2:

protected internal来保护或内部。 访问被无论是从派生类或从含组件允许的。

访问修饰符(C#编程指南) :

受保护的内部
类型或构件可以通过在其声明,或从另一个组件中的导出类中的组件中的任何代码访问。 从另一个组件访问必须发生类声明,从在其中受保护的内部元件被声明的类派生内,并且它必须通过派生类类型的实例发生。



文章来源: Protected member visible for user