Trong C++, bạn có thể làm như sau:Buộc sử dụng các giao diện thay vì thực hiện cụ thể trong việc kê khai (NET)
class base_class
{
public:
virtual void do_something() = 0;
};
class derived_class : public base_class
{
private:
virtual void do_something()
{
std::cout << "do_something() called";
}
};
Các derived_class
override phương thức do_something()
và làm cho nó private
. Hiệu quả là, rằng cách duy nhất để gọi phương pháp này là như thế này:
base_class *object = new derived_class();
object->do_something();
Nếu bạn khai báo các đối tượng như kiểu derived_class
, bạn không thể gọi phương thức vì đó là tin:
derived_class *object = new derived_class();
object->do_something();
// --> error C2248: '::derived_class::do_something' : cannot access private member declared in class '::derived_class'
Tôi nghĩ điều này khá hay, bởi vì nếu bạn tạo một lớp trừu tượng được sử dụng như một giao diện, bạn có thể chắc chắn rằng không ai vô tình khai báo một trường là kiểu cụ thể, nhưng luôn sử dụng lớp giao diện.
Vì trong C#/.NET nói chung, bạn không được phép thu hẹp quyền truy cập từ public
đến private
khi ghi đè phương pháp, có cách nào để đạt được hiệu ứng tương tự ở đây không?
Hiệu ứng này là những gì tôi muốn, cảm ơn. – gammelgul
+1 Tôi vừa học được điều gì đó mới mẻ! – BritishDeveloper
+1 Cảm ơn vì điều này, cũng đã học được điều gì đó mới mẻ! – Deano