【问题标题】:Is it possible to define member on a child class without defining it on the abstract parent class? C#是否可以在子类上定义成员而不在抽象父类上定义它? C#
【发布时间】:2011-02-12 16:47:52
【问题描述】:

澄清一下,一个子类的所有成员都必须声明在它上面的抽象类上吗?

可能是这样的:

public abstract class MyParent
{
    public int x { get; set; }
}
public class MyChild : MyParent
{
    public int x { get; set; }
    public string MyName { get; private set; }
}

这只是一个例子……在这种情况下,属性MyName没有在父类中定义,而是在子类中……可以吗?

提前致谢!

【问题讨论】:

    标签: c# inheritance abstract-class


    【解决方案1】:

    是的,您可以在子类中声明其他属性和方法。

    但是,如果您使用声明为祖先类型的变量,您将只能通过该变量访问定义在祖先类型中的成员。获得子类特殊内容的唯一方法是向下类型转换为子类型。

    顺便说一句:子类应该重复在祖先中所做的声明。您的 int x 属性将导致问题,因为将有两个不同的 x 属性运行。

    需要一个具体的(非抽象的)子类来覆盖抽象祖先中声明的任何虚拟方法或属性。虚拟和覆盖都需要声明中的特定关键字。

    【讨论】:

      【解决方案2】:

      是的,你这样做当然很正常。但是,您唯一不能做的就是访问 MyName 属性,如果您要通过父级。在这种情况下,您将只能访问 MyParent 共有的那些。

      【讨论】:

        【解决方案3】:

        是的,可以在子类中创建不在父类中的新成员。这就是开设子课程的全部意义所在。子类应该通过添加新成员或修改现有成员的行为来“扩展”父类

        但是,您无需在子类中重新创建父类成员。子类自动获取父类的所有成员。

        您提供的代码是合法的 C# 程序,这意味着您的意图是为子类创建不同的 int x。通常情况并非如此,Microsoft C# 编译器会给您一个警告。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-06-18
          • 2013-07-27
          • 2021-03-22
          • 1970-01-01
          • 2021-04-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多