C# 如何创建继承Ellipse类的子类
我是C语言的新手,在创建继承某个类属性的子类时遇到了一些麻烦。我正在使用Visual Studio 2012创建Windows Phone 8应用程序 我在继承Button或TextBox之类的类方面没有问题,但我不能让它继承Ellipse类。我可以继承Shape类,椭圆是从该类派生的,但不能继承椭圆本身 这样做的目的是为我创建的椭圆添加一些属性,以便跟踪用户按这些椭圆的顺序。我可以使用另一个类,或者使用Ellipse本身(并使用它已经存在的属性),但出于学习目的,我想知道为什么我不能(或者如何)继承Ellipse类C# 如何创建继承Ellipse类的子类,c#,wpf,inheritance,windows-phone-8,C#,Wpf,Inheritance,Windows Phone 8,我是C语言的新手,在创建继承某个类属性的子类时遇到了一些麻烦。我正在使用Visual Studio 2012创建Windows Phone 8应用程序 我在继承Button或TextBox之类的类方面没有问题,但我不能让它继承Ellipse类。我可以继承Shape类,椭圆是从该类派生的,但不能继承椭圆本身 这样做的目的是为我创建的椭圆添加一些属性,以便跟踪用户按这些椭圆的顺序。我可以使用另一个类,或者使用Ellipse本身(并使用它已经存在的属性),但出于学习目的,我想知道为什么我不能(或者如何
public partial class Ball : Ellipse
{
...
}
定义为密封的:
public sealed class Ellipse : Shape
意味着
当应用于类时,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
}
现在,如果任何方法需要eliple
类型的参数,您可以传递ball.eliple
。如果它接受Shape
类型的参数,则可以直接传递球
对象
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
}