2011-08-25 17 views
26

我只是碰到一個未知的c#概念對我來說 任何人都可以告訴我內部設置屬性的目的嗎? 這是什麼用途? 我知道內部關鍵字用於在程序集內工作。什麼是C#中的內部集屬性?

回答

48

如果你有一個內部設置訪問器(和公共獲取訪問器)的屬性,這意味着程序集內的代碼可以讀取(獲取)和寫入(設置)屬性,但其他代碼只能讀取它。

您可以通過閱讀關於internal access modifierpublic access modifierproperties來推導出上述信息。

此外,你可以閱讀約Restricting Accessor Accessibility

+2

+1,此外,我可能想添加到您的答案,我已經看到在兩種情況下使用的內部集:1)「隱藏」的東西,這可能不是一個好辦法並指向一個設計流程和2.)單元測試目的 – UrbanEsc

+0

UrbanEsc我同意這似乎指向一個設計缺陷,大多數時候你看到它。我剛剛在我正在處理的一些代碼中遇到了這個問題,它似乎是另一個類的依賴關係的源頭(因爲它可以克服對私有訪問的限制)。您不得不想知道爲什麼人們選擇諸如這比事情更明顯。 – Sprague

1

這意味着該屬性只能由與該屬性相關的類位於同一個程序集中的代碼進行設置。

1

它是一種構造,它允許屬性的值僅由同一程序集內的代碼設置。

2

如果使用內部訪問修飾符標記屬性設置器,則只有駐留在程序集中的類可以設置該屬性。

public string MyProperty { get; internal set; } 
9

Properties in C# 2.0

在C#2.0中,您可以設置的獲取和設置可訪問性。

下面的代碼顯示瞭如何創建一個具有內部集合和public get的私有變量。 Hour屬性現在只能從同一模塊(dll)中的代碼中設置,但可以由使用包含該類的模塊(dll)的所有代碼訪問。

// private member variables 
private int hour; 

// create a property 
public int Hour 
{ 
    get { return hour; } 
    internal set { hour = value; } 
} 
7

假設您正在設計一個供其他程序員使用的API。在此API中,您有一個對象Foo,其中有一個屬性Bar。您不希望其他程序員在引用您的程序集時設置Bar的值,但您需要從API中自行設置值。只要財產申報這樣:

public class Foo 
{ 
    public string Bar { get; internal set; } 
} 
3

給出聲明public string MyString {get; internal set;}的屬性,這意味着

  • 可以從withhin你的應用程序的任何地方閱讀屬性的值public string MyString
  • 但你可能只有一個新的價值從屬性組件其中聲明 - 或來自朋友程序集。 (internal set;