我对C#语言很陌生,在创建继承某些类属性的子类方面遇到了一些困难。我正在使用Visual 2012创建Windows 8应用程序。
我在继承像Button或TextBox这样的类方面没有问题,但是我不能让它继承Ellipse类。我可以继承Shape类,从中派生Ellipse,但不能继承Ellipse本身。
这个想法是在我创建的椭圆中添加一些属性,这样我就可以跟踪用户按这些椭圆的顺序。我可以使用另一个类,或者使用Ellipse本身(并使用它已经存在的属性),但是为了学习目的,我想知道为什么我不能(或者如何)继承Ellipse类。
public partial class Ball : Ellipse
{
...
}发布于 2014-02-13 15:43:52
因为Ellipse是sealed,而sealed的意思是“不能继承”,所以不能继承它。
另外,您可以使用装饰图案,这有助于我们在没有继承的情况下扩展类的行为。
public abstract class ShapeDecorator : Shape {
protected Shape Shape {get; private set;}
protected(Shape shape) {
this.Shape = shape;
}
}
public abstract class EllipseDecorator : ShapeDecorator {
protected(Ellipse ellipse) : base(shape) {
}
public Ellipse Ellipse { get { (Ellipse)base.Shape; } }
// Here, if you wish, you can override some methods using Ellipse features inside
// So that your Shape acts as Ellipse
}
public class Ball : EllipseDecorator {
public Ball() : base(new Ellipse()) {
// you can initialize base.Ellipse here
}
// Now you can add your Ball specific methods here
// You can still override some methods here
// So that your ellipse acts as Ball
}现在,如果任何方法需要Ellipse类型的参数,则可以传递ball.Ellipse。如果它接受Shape类型的参数,则可以直接传递Ball对象。
发布于 2014-02-13 15:28:40
不行,Ellipse是sealed。
你可以把它包装起来,但你不能继承它。
public class MyEllipse: Shape
{
private Ellipse _Ellipse;
// pass through overridden Shape methods/properties to the underlying Ellipse
// add custom methods/properties.
}发布于 2014-02-13 15:28:33
Ellipse被定义为sealed
public sealed class Ellipse : Shapesealed意味着
当应用于类时,密封修饰符将阻止其他类从该类继承。
https://stackoverflow.com/questions/21758432
复制相似问题