在派生类中看不到父类的方法

发布于 2024-12-10 03:41:38 字数 231 浏览 3 评论 0原文

我试图扩展一个类,然后使用基类中的方法,但我看不到它。

我的代码:

class A {
    protected void Foo(){}
}

class B : A {}

class C{
    void Bar(){
         B b = new B();
         b.Foo();
    }
}

我如何在 C 中使用 b.Foo?

I'm trying to extend a class, then use a method from base class, but i can't see it.

My Code:

class A {
    protected void Foo(){}
}

class B : A {}

class C{
    void Bar(){
         B b = new B();
         b.Foo();
    }
}

How could i use b.Foo in C?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

っ左 2024-12-17 03:41:39

您只能从后代类中看到受保护的方法。

C 不是从 B 继承的,因此根据定义,它看不到其受保护的方法。

You can only see protected method from the within the descendant classes.

C doesn't inherit from B so, by definition, it cannot see its protected methods.

落花浅忆 2024-12-17 03:41:39

您需要使用 public 修饰符来标记 Foo 而不是 protected,因为 C 不继承 B;它“使用”B.

请参阅此处了解更多信息

You need to mark Foo with the public modifier rather than protected because C does not inherit B; it "uses" B.

See here for more information.

揪着可爱 2024-12-17 03:41:39

使其公开Foo() 仅对 A 及其派生类(如“B”)可见。 C 不是 A 的派生类。

Make it public. Foo() will only be visible to A and its derived classes (like 'B'). C is not a derived class of A.

会傲 2024-12-17 03:41:39

您必须将方法 Foo 公开。

class A {
    public void Foo() {}
}

class B : A {}

class C {
    void Bar(){
         B b = new B();
         b.Foo(); // Works
    }
}

You must make the method Foo public.

class A {
    public void Foo() {}
}

class B : A {}

class C {
    void Bar(){
         B b = new B();
         b.Foo(); // Works
    }
}
弃爱 2024-12-17 03:41:39

因为 Foo 是受保护的,所以除了派生类之外,任何其他东西都看不到它。

要公开它,您需要执行以下操作:

class A 
{
    protected void Foo(){}
}

class B : A 
{
    public new void Foo()
    {
        base.Foo()
    }
}

其他答案已经涉及到这一点,但没有提到使用 new 关键字来公开具有相同名称但不同可访问性的方法。

Because Foo is protected it's can't be seen to anything except derived classes.

To expose it you need to do:

class A 
{
    protected void Foo(){}
}

class B : A 
{
    public new void Foo()
    {
        base.Foo()
    }
}

Other answers have touched on this but none mention the use of the new keyword to expose the method with the same name, but different accessibility.

如何视而不见 2024-12-17 03:41:38

你不能。 Foo 是类 A 的受保护成员函数,因此只能在类 A 中或从它继承的类中使用。

class A 
{
   protected int x() {}
}

class B : A 
{
   void F() 
   {
      A a = new A();  
      B b = new B();  
      a.x();   // Error
      b.x();   // OK
   }
}

You can't. Foo is a protected member function of class A, and as such can only be used from within class A, or from within a class that inherits from it.

class A 
{
   protected int x() {}
}

class B : A 
{
   void F() 
   {
      A a = new A();  
      B b = new B();  
      a.x();   // Error
      b.x();   // OK
   }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文