2012-08-11 128 views
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繼承?

+0

請使用網站功能回覆答案,如發表評論。由於這是一個問答網站,其實答案並不是[答案]將被刪除](http://stackoverflow.com/faq#deletion)。不要忘記標記答案已被接受。 – GSerg 2012-08-11 16:02:28

回答

2

Adapter屬性聲明爲protected internal,這意味着它是派生類(protected在同一組件(internal)類訪問。由於Form1SomeTableTableAdapter在同一個程序集中,因此它們可以訪問彼此的內部成員。

4

protected internal表示受保護的或內部的。可以從派生類或包含程序集訪問。

Access Modifiers (C# Programming Guide)

保護內部
類型或構件可以通過在其聲明,或從另一個組件中的導出類中的組件中的任何代碼訪問。從另一個程序集進行訪問必須在派生自聲明受保護內部元素的類的類聲明中進行,並且必須通過派生類類型的實例進行。