【问题标题】:Protected member visible for user受保护的成员对用户可见
【发布时间】:2012-08-08 13:57:08
【问题描述】:

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

这怎么可能:

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

【问题讨论】:

  • 请使用网站功能回复答案,例如发表评论。由于这是一个问答网站,因此实际上不是答案的答案will be removed。不要忘记将答案标记为已接受。

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


【解决方案1】:

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

Access Modifiers (C# Programming Guide):

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-09-26
      • 2013-08-06
      • 1970-01-01
      • 2018-02-11
      • 1970-01-01
      • 2011-06-22
      • 2014-12-31
      • 2016-06-12
      相关资源
      最近更新 更多