C# 如何创建继承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本身(并使用它已经存在的属性),但出于学习目的,我想知道为什么我不能(或者如何

我是C语言的新手,在创建继承某个类属性的子类时遇到了一些麻烦。我正在使用Visual Studio 2012创建Windows Phone 8应用程序

我在继承Button或TextBox之类的类方面没有问题,但我不能让它继承Ellipse类。我可以继承Shape类,椭圆是从该类派生的,但不能继承椭圆本身

这样做的目的是为我创建的椭圆添加一些属性,以便跟踪用户按这些椭圆的顺序。我可以使用另一个类,或者使用Ellipse本身(并使用它已经存在的属性),但出于学习目的,我想知道为什么我不能(或者如何)继承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
}