2

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

这怎么可能:

//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 继承的,我怎么能访问受保护的成员?

4

2 回答 2

4

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

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

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

于 2012-08-11T14:53:44.613 回答
2

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

于 2012-08-11T14:53:27.243 回答