【问题标题】:Concept: What is the variable names inside a child class? Do they have names?概念:子类中的变量名是什么?他们有名字吗?
【发布时间】:2013-03-30 00:47:22
【问题描述】:

我正在使用 .NET,但我想这会扩展到其他语言...

所以当一个子类继承一个类时,它会得到父类的成员变量和属性。假设有一个私有变量名称“mFirstName”,并且有一个名为 FirstName 的 ReadOnly 属性,它从对象中获取 FirstName 的值。

我创建了另一个继承这个父类的类,在子类中我可以使用 FirstName 属性来获取子类中变量的值...但是那个变量的名称是什么?

或者换句话说,在父类中有一个名为 mFirstName 的私有变量。子类中的等价变量叫什么?

【问题讨论】:

  • 没有。这是私人的。

标签: .net oop class object


【解决方案1】:

这实际上不是名称的问题,而是可访问性的问题。

私有字段仍然是派生类的成员状态,它只是碰巧是成员状态,除非派生类是基类的嵌套类,否则您将无法通过名称直接访问。

public class Foo
{
    private int bar;

    public virtual void Do()
    {
        this.bar = 1;
    }

    private class DerivedFoo : Foo
    {
        public override void Do()
        {
            this.bar = 2;
        }
    }
}

在上面的示例中,该字段是私有的,但派生类仍然可以访问。从Foo 继承的external 类将不具有相同的能力。

所以字段名称相同,字段仍然是派生类的状态。 可访问性完全取决于继承者。

【讨论】:

    【解决方案2】:

    子类将继承所有字段,包括像mFirstName 这样的私有变量。如果父类实现FirstName 属性来读取和写入私有mFirstName 变量,那么除非您覆盖它,否则子类也将如此。 mFirstName 对子类不可见,但是 FirstName 属性将 - 子类必须使用 FirstName 的父类实现,或者,如果允许,以其他方式使用覆盖实现它.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-04
      • 1970-01-01
      • 2017-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多