簡體   English   中英

我想使用基類,但我不希望調用應用程序知道它該如何執行? C#

[英]I want to use a base class but I dont want calling apps to know about it how do I do this? c#

我有C#的類庫。 與班級“學生”。 它繼承自“人”。

我希望班級庫的用戶能夠實例化班級學生,但不能實例化人員。

我嘗試了以下方法:

public class person

private class student : person

但是我得到了編譯錯誤:

命名空間中定義的元素不能顯式聲明為私有,受保護或受保護的內部。

為什么是這樣? 我想公開個人,但不公開基礎類型。

將您的Person類聲明為abstract 這意味着無法實例化。

抽象類不能實例化為一個對象,僅出於派生子類的目的而提供。

public abstract class Person
{
 // members here
}

public class Student : Person
{
 // members here
}

有關更多信息,請參見此MSDN文章

我可以將Personabstract

編輯:AndyC說了什么!

使人抽象和公開,這將阻止任何人實例化它。 然后學生應該公開。

還有其他一些選擇,例如,將學生的構造函數設為私有,並在類上為Create添加一個靜態方法。

編輯:othershrubery說了什么:)

如果要將繼承類定義為private則基類不能是public 我認為您想要使Person成為abstract類的答案。

使Person抽象是一種方法,通常是最佳方法。 但是,這並不總是可行的。 在您自己的代碼中可能有一種情況,您只需要一個Person,但是仍然不希望在控件之外實例化基類的實例。

如果需要執行此操作,請使Person公開而不是抽象,而應將其構造函數設為內部。 這將允許僅從同一程序集中的代碼中調用構造函數,因此您可以實例化基本Person在后台進行的工作,同時仍可以防止外部代碼實例化基類。

您還可以將所有類(Person和Student)設為私有或內部,但隨后定義一個公共工廠類,該類將分發從Person派生的實例作為公共接口IPerson的實現。 這樣,您不僅可以控制對實際類的訪問,還可以控制這些類的實例化和水合。 如果Student或Person需要外部代碼不應該直接知道的其他資源,或者您實施了限制訪問Person或Student中的數據的安全性,那么這將是很好的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM