2011-02-12 49 views
6

只是为了澄清,是否真的强制要求所有的子类的成员都在它上面的抽象类中声明?是否有可能在子类上定义成员而不在抽象父类上定义它? C#

有可能是这样的:

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未在父类中定义的,但它是在子类...可能吗?

在此先感谢!

回答

4

是的,你可以在子类中声明额外的属性和方法。

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

另一方面:子类应该不是重复在祖先做出的声明。这里的int x属性会导致问题,因为会有两个不同的x属性运行。

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

2

是的,可以在子类中创建不在父类中的新成员。这是儿童课程的重点。子类应该通过添加新成员或修改现有成员的行为来“扩展”父类

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

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

+0

我很困惑这个答案。 – spender 2011-02-12 16:55:22

2

是的,当然这是非常正常的。你唯一不能做的就是访问MyName属性,如果你正在通过父项。在这种情况下,您只需访问MyParent的共同点即可。

相关问题