C++ では、次のことができます。
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";
}
};
はメソッドをderived_class
オーバーライドしてにします。その結果、このメソッドを呼び出す唯一の方法は次のようになります。do_something()
private
base_class *object = new derived_class();
object->do_something();
オブジェクトを type として宣言するderived_class
と、プライベートであるためメソッドを呼び出すことはできません。
derived_class *object = new derived_class();
object->do_something();
// --> error C2248: '::derived_class::do_something' : cannot access private member declared in class '::derived_class'
インターフェイスとして使用される抽象クラスを作成すると、フィールドを具象型として誤って宣言する人が誰もいないことを確認できますが、常にインターフェイス クラスを使用するため、これは非常に優れていると思います。
public
C# / .NET では一般的に、メソッドをオーバーライドするときに からへのアクセスを狭めることはできないprivate
ため、ここで同様の効果を達成する方法はありますか?