2011-12-31 22 views
5

Tôi có lớp cơ sở sau đây:Không thể ghi đè lên tài sản của bảo vệ thiết

abstract class Base 
{ 
public abstract object Var 
{ 
    get; 
    protected set; 
} 
} 

Và lớp này có nguồn gốc:

class Derived : Base 
{ 
public override object Var 
{ 
    get {//code here 
    } 
    set {//code here -- I get error here! 
    } 
} 
} 

Nhưng tôi nhận được lỗi này:

Cannot change access modifier when overriding 'protected' inherited member 'Var'

tôi đã thử thêm một từ khóa protectedprivate trước khi đặt nhưng không giúp được gì. Làm thế nào để sửa lỗi này?

UPDATE:
Các cơ sở lớp phải đảm bảo rằng lớp con cung cấp giá trị cho Var lúc sáng tạo. Vì vậy, tôi cần phải có setter khai báo trong lớp cơ sở.
Cách khác, tôi có thể khai báo biến thành viên riêng để thực hiện việc này và xóa bộ đặt, nhưng đó không phải là một tùy chọn như được thảo luận here.

Trả lời

8

Vấn đề là set trong lớp học có nguồn gốc của bạn có public khả năng hiển thị — vì bạn không chỉ định rõ protected một cách rõ ràng. Kể từ khi thiết lập của tài sản này đã được bảo vệ tầm nhìn trong lớp cơ sở của bạn, bạn nhận được lỗi

cannot change access modifiers when overriding 'protected' inherited member

Bạn có thể sửa chữa nó bằng cách cho các thiết lập bảo vệ tầm nhìn trong lớp có nguồn gốc của mình:

class Derived : Base { 
    public override object Var { 
     get { return null; } 
     protected set { // <------ added protected here 
     } 
    } 
} 
+1

Oh my god! Ngu ngốc VS! Như tôi đã nói trong bài viết của mình, tôi đã thử điều này và nó không giúp được gì. Tôi đã thử lại khi bạn đề cập đến nó, nó vẫn không hiệu quả, tôi đã xem lại câu trả lời của bạn, biên dịch lại, và nó đã biến mất! Vậy tôi phải làm gì bây giờ? Tôi có nên chấp nhận câu trả lời của bạn hay tôi nên xóa bài đăng của mình? – atoMerz

+0

@AtoMerZ - Tôi sẽ chấp nhận câu trả lời hay nhất và tiếp tục. Kể từ khi câu hỏi đã upvoted câu trả lời, bạn sẽ cần một mod để loại bỏ nó. Không đáng để gặp rắc rối cho bất cứ ai. –

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