2012-10-12 50 views
5

可能重複:
c# internal abstract class, how to hide usage outside assembly如何使用內部關鍵字隱藏課程?

我有共同的組裝/項目,有幾個抽象類。當我創建一個新程序集時,開發人員應該從MathProblemMathProblemTemplate<T>類派生。

所以,我想這個類MathProblemTemplate可以internal,我的意思是,當你打算在基類設置爲一個具體的類,而不是顯示在智能感知類MathProblemTemplate,不過是爲MathProblemTemplate<T>

// Question classes 
public abstract class Question 
{ 
    protected QuestionTemplate Template { get; private set; } 

    public Question(QuestionTemplate template) 
    { 
     this.Template = template; 
    } 
} 

public abstract class MathProblem : Question 
{ 
    public MathProblem(MathProblemTemplate template) 
     : base(template) 
    { 
    } 
} 

// QuestionTemplate classes 
public abstract class QuestionTemplate 
{ 
    public QuestionTemplate() { } 
} 

// This is the class which I'd like to hide 
public abstract class MathProblemTemplate : QuestionTemplate 
{ 
} 

public abstract class MathProblemTemplate<T> : MathProblemTemplate 
{ 
    protected abstract T Method1(); 
    protected abstract T Method2(); 
} 

是這可能嗎?

+0

你讀過[此相關的問題(http://stackoverflow.com/questions/1244953/c-sharp-internal-abstract-class當你問你的問題時,在列表中顯示的外部程序集 - 如何隱藏 - 使用 - 外部程序集? –

+0

是的,我讀過它,但我仍然得到像這樣的錯誤:不一致的可訪問性:基類'DevNinja.Core.Models.MathProblemTemplate'不易訪問類'DevNinja.Core.Models.MathProblemTemplate ' –

+0

嗯,是的,你正在使用不同的模板。 –

回答

3

你不能,原因是MathProblemTemplate<T>是公開的,因此它所繼承的任何類也需要公開。

你可以只取出MathProblemTemplate和移動在其中的任何代碼爲MathProblemTemplate<T>

+0

但我需要MathProblem構造函數中的參考,這就是爲什麼我真的需要通用的原因 –

+0

在這種情況下,您可能必須使MathProblem爲泛型,然後提供泛型MathProblemTemplate,例如'公共抽象類MathProblem :Question {Public MathProblem(MathProblemTemplate template){}}' –

+0

但是會是多餘的,因爲它應該是一個MathProblemTemplate。你不這麼認爲嗎? –