2012-10-12 4 views
5

可能性の重複:
c# internal abstract class, how to hide usage outside assembly内部キーワードを使用してクラスを非表示にするにはどうすればよいですか?

私はいくつかの抽象クラスを持っている一般的なアセンブリ/プロジェクトを持っています。新しいアセンブリを作成する場合、開発者はMathProblemMathProblemTemplate<T>クラスから派生する必要があります。

だから、私はクラスMathProblemTemplateinternalことができると思い、あなたがインテリセンスでクラス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コンストラクタでそれから参照が必要です、それはなぜ私は実際にgenericが必要なのですか? –

+0

その場合、MathProblemを汎用化して、一般的なMathProblemTemplateを供給しなければならないかもしれません。 public abstract class MathProblem :質問{public MathProblem(MathProblemTemplate テンプレート){}} ' –

+0

はMathProblemTemplateである必要があるため、冗長になります。あなたはそうは思わない? –

関連する問題