2009-07-01 56 views
3

有沒有一種好的方法可以允許只有某個類具有對另一個類中的屬性的讀/寫訪問權限,而在設計模式下它們之間沒有繼承結構。淨?限制對.NET中某些類的類屬性的讀/寫訪問

因此,如果一個類具有公共屬性,只有某個類具有這些屬性的可見性?

如果在設計模式下不可行,則在運行期間不可能。我知道在集合中使用標誌並且得到語句的hokey方法,但我認爲有更好的方法。

回答

4

有在C#中沒有friend訪問。您有public/protected/internal(包括[InternalsVisibleTo]),但沒有更細化的(即在類型間級別)。所以不行。

+0

+1,因爲它非常準確! ;-) – Cerebrus 2009-07-01 08:12:18

2

您可以使用關鍵字internal在C#中實現這一點:

內部關鍵字是訪問 改性劑的類型和類型成員。 內部類型或成員 僅在在同一 裝配文件訪問,如下例所示:

public class BaseClass 
{ 
    // Only accessible within the same assembly 
    internal static int x = 0; 
} 

參見:Practical usings of 「internal」 keyword in C#

+1

並使用InternalsVisibleTo使某些東西可用於其他程序集。微軟這樣做是爲了讓內部的東西對他們的單元測試類可見。 – RichardOD 2009-07-01 08:12:13

+0

適用於同一裝配體內的任何物品。這對我來說仍然過於寬泛。我想要一個班級只信任另一個班級。一個類在DAL中,另一個在業務層,因此將它們放在同一個程序集中會破壞它們的隔離。 – 2009-07-01 15:53:42

0

如果您讓任何人都可以訪問它們的屬性。如果你讓它們成爲內部的,受保護的,甚至是私人的 - 任何人都可以使用反射來訪問它們。如果你想阻止他們的使用,請使用內部像米奇建議。

如果存在此約束的安全原因,請使用Code Access Security來保護您的屬性。請注意,這不是一件簡單的事,你可以將它們放在一起 - 認爲必須將其放入安全模型和您公開的權限中。也意識到這必須在程序集級別上完成,並會影響應用程序的部署。

你可能不需要做太深的事情。您可能會「阻止」人們通過將其隱藏在明確實現的界面後面來訪問這些屬性。