2012-10-12 30 views
5

thể trùng lặp:
c# internal abstract class, how to hide usage outside assemblyLàm thế nào để ẩn một lớp bằng cách sử dụng từ khóa nội bộ?

Tôi có một hội đồng chung/dự án mà có một số lớp trừu tượng. Khi tôi tạo một hội đồng mới, nhà phát triển sẽ lấy được từ các lớp MathProblemMathProblemTemplate<T>.

Vì vậy, tôi đoán lớp MathProblemTemplate có thể internal, tôi có nghĩa là khi bạn có kế hoạch để thiết lập một lớp cơ sở để một lớp bê tông, không hiển thị trong IntelliSense lớp MathProblemTemplate, nhưng có cho 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(); 
} 

Is điều này có thể?

+0

Có bạn đọc [câu hỏi này có liên quan] (http://stackoverflow.com/questions/1244953/c-sharp-internal-abstract-class -how-to-hide-usage-outside-assembly) xuất hiện trong danh sách khi bạn hỏi câu hỏi của bạn? –

+0

Có, tôi đã đọc nó, nhưng tôi vẫn nhận được lỗi như: Khả năng truy cập không phù hợp: lớp cơ sở 'DevNinja.Core.Models.MathProblemTemplate' ít truy cập hơn lớp 'DevNinja.Core.Models.MathProblemTemplate ' –

+0

Hmm, vâng, bạn đang sử dụng các mẫu làm cho nó khác nhau. –

Trả lời

3

Bạn không thể, lý do là MathProblemTemplate<T> là công khai, do đó bất kỳ lớp nào được thừa hưởng từ cũng cần phải được công khai.

Bạn chỉ có thể loại bỏ MathProblemTemplate và di chuyển bất kỳ mã trong nó vào MathProblemTemplate<T>

+0

Nhưng tôi cần một tham chiếu từ nó trong MathProblem constructor, đó là lý do tại sao tôi thực sự cần chung –

+0

Trong trường hợp đó, bạn có thể phải thực hiện MathProblem generic và sau đó cung cấp MathProblemTemplate chung ví dụ: 'public abstract class MathProblem : Câu hỏi {public MathProblem (MathProblemTemplate template) {}}' –

+0

Nhưng sẽ thừa vì đây phải là MathProblemTemplate. Bạn không nghĩ vậy sao? –

Các vấn đề liên quan