2012-10-12 10 views
5

Powiel możliwe:
c# internal abstract class, how to hide usage outside assemblyJak ukryć klasę za pomocą wewnętrznego słowa kluczowego?

mam wspólnego zespołu/projektu, który ma kilka klas abstrakcyjnych. Po utworzeniu nowego zestawu programista powinien wywodzić się z klas MathProblem i MathProblemTemplate<T>.

Tak, myślę, że klasa MathProblemTemplate może być internal, to znaczy, gdy masz zamiar ustawić klasę bazową do konkretnej klasy, nie wykazują w intellisense klasę MathProblemTemplate, ale tak dla 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(); 
} 

Czy to możliwe?

+0

Czytałeś [to istotne pytanie] (http://stackoverflow.com/questions/1244953/c-sharp-internal-abstract-class -how-to-hide-usage-outside-assembly), które pojawiły się na liście, gdy zadałeś pytanie? –

+0

Tak, czytałem, ale wciąż dostaję błędy: Niespójna dostępność: klasa podstawowa "DevNinja.Core.Models.MathProblemTemplate" jest mniej dostępna niż klasa "DevNinja.Core.Models.MathProblemTemplate ' –

+0

Hmm, tak, używasz szablonów, dzięki czemu jest inny. –

Odpowiedz

3

Nie można, dlatego, że MathProblemTemplate<T> jest publiczne, dlatego każda klasa, z której pochodzi, również musi być publiczna.

Można po prostu usunąć MathProblemTemplate i przenieść dowolny kod w nim do MathProblemTemplate<T>

+0

Ale potrzebuję referencji od tego w konstruktorze MathProblem, dlatego tak naprawdę potrzebuję generycznego –

+0

W takim przypadku może być konieczne wygenerowanie MathProblem, a następnie dostarczenie ogólnego MathProblemTemplate np. 'publiczna klasa abstrakcyjna MathProblem : Pytanie {public MathProblem (szablon MathProblemTemplate) {}}' –

+0

Ale byłoby zbędne, ponieważ powinien to być MathProblemTemplate. Czy nie sądzisz? –

Powiązane problemy