假定組分(說COMPA)在SDK暴露出公共C#的.NET類(比如鹼):如何不允許暴露從特定類派生的類?
namespace CompA { public abstract class Base {} }
一個不同的組件(比如說EXTB)通過從該基類派生延伸COMPA:
namespace ExtB { class Derived : CompA.Base {} }
您的意見是什麼,請不要允許聲明類ExtB.Derived爲public的最佳方法是什麼? CompA.Base是爲擴展 CompA,但不是爲暴露新的公共API與它。
namespace ExtB { public class Derived : CompA.Base {} } // DISALLOW
我能想到的是期望程序集暴露公共API被標記爲.NET自定義屬性並用另一個.NET自定義屬性標記基類。加載這些程序集的產品將不允許加載此類程序集,從而暴露/發佈從標有自定義屬性的類型派生的類型。 COMPA的
的AssemblyInfo.cs:
[assembly:SdkApiAssemblyAttribute()]
的AssemblyInfo.cs EXTB的:
[assembly:SdkApiAssemblyAttribute()]
Base.cs:
namespace CompA
{
[Publishable(false)]
public abstract class Base {}
}
謝謝!
你爲什麼要防止它? – 2014-09-13 15:03:52
@SriramSakthivel,派生類是由ExtB序列化的,所以我想確保它們不會被意外暴露。 – 2014-09-13 15:09:55
@SriramSakthivel,類型Base暴露了ExtB的公共API中沒有必要的信息。當然,暴露此類信息的成員可以在Base類型中聲明爲protected,但我想知道是否可以確保從特定類派生的類不能公開。 – 2014-09-13 15:27:06