2012-08-22 62 views
1

我有一個類庫有一些公共類和許多內部工具類。對於鏈接到DLL的人員,這些實用程序不應該可見/可用。如何限定只能在類庫項目中使用的類?

namespace MyProject { 
    public class PublicClass { } 
} 
namespace MyProject { 
    internal class UtilClass { } 
} 

當我這樣做,VS觸發錯誤,如「UtilClass比PublicClass.Member不易進入」

我做錯什麼了嗎?我應該怎麼做?我看到有私人課程的圖書館無法使用我。我如何得到這種行爲?

謝謝。

+1

聽起來像你在'PublicClass'中有'UtilClass'類型的'protected'或'public'成員。降低該成員對「內部」的可見度。 – CodesInChaos

+0

你的代碼應該是,應該編譯。 – CodesInChaos

+0

此代碼沒有證明問題,請發表其餘的代碼。然而,CodesInChaos的建議很可能是原因。 –

回答

5

這意味着您需要public您的PublicClass類型的成員UtilClass。編譯器不允許這樣做,因爲外部程序集可以訪問公共成員,但成員本身的類型是內部的,因此不可訪問。

使該成員內部而不是公開。

1

你的錯誤是相當普遍的。作爲例子,如果你有兩類:

public class PublicClass { ... } 

private class PrivateClass { ... } 

這將返回任何錯誤。但是,如果您添加PublicClass屬性,如

public PrivateClass MyProperty { ... } 

你會得到一個錯誤。因爲該屬性對於你的庫房的用戶來說是明顯的,但是屬性的類型是不可見的。

1

我懷疑你沒有向我們展示完整的代碼,因爲你已經提供了應該工作。

您必須擁有一個公共方法或返回您的內部類E.G.的實例的屬性。

namespace MyProject 
{ 
    public class PublicClass 
    { 
     public UtilClass DoSomething() {} 
     public UtilClass { get; } 
     // External assemblies cannot see the UtilClass type which is 
     // why this does not work. 
    } 
} 

這顯然不能完成,因爲外部程序集需要知道它。

如果您確實需要擁有一個暴露行爲而不暴露內部類型的公共屬性,請考慮擁有一個您的工具類可以實現的接口。

這將允許您保持輔助類的內部,但仍然暴露它(通過接口)到外部程序集。

internal class UtilClass : IMyPublicInterface 
{ 
} 

namespace MyProject 
{ 
    public class PublicClass 
    { 
     public IMyPublicInterface DoSomething() {} 
     public IMyPublicInterface { get; } 
     // External assemblies now only need to know about the public interface. 
    } 
} 
相關問題