通过派生类型调用的静态方法

static method invoked via derived type

有一种class,叫做圆。它包含 circleID、circleGeometry 和 circlePath 属性。

public class Circle 
{
    public string ID {get; set;}
    public EllipseGeometry circleGeometry {get; set;}
    public Path circlePath {get; set;}
}

现在,我正在尝试为一个圆设置 ZIndex 值。例如,它将是 2.

Canvas.SetZIndex(someCircleID.circlePath,2);

但是我有这样的警告:

"static method invoked via derived type"

谁能解释一下这是什么意思?

这意味着方法 SetZIndex 是在 class Canvas 的基类型上定义的,但您使用后者调用它。你最好使用 base-class.

SetZIndex 是在 Panel class 上定义的,Canvas 是从中派生的。编译器生成一条警告,说明您正在对子类型使用静态方法。这不是一个实际的问题,但在以某些方式使用时可能会导致混淆。由于 SetZIndex 返回无效,所以这应该不是问题。

但想象一下:

var ftpRequest = (FtpWebRequest) HttpWebRequest.Create("ftp://my.ftp.com");

Create 实际上是 WebRequest 的静态方法,但用在 HttpWebRequest 上,因为它是派生类型,你 可能 这样做。所以,您希望它是正在生成的 Web 请求,对吗?但它不是,它生成一个 FtpWebRequest,因为它是在 URI 中指定的。

编辑:

我想指出,通常情况下,编译器警告的存在是有原因的,这也是存在的方式。只要 Canvas class 中没有创建 SetZIndex 的重载,调用就是安全的。但是正如@SriramSakthivel 在评论中指出的那样,如果您或任何人在此过程中将任何扩展方法或静态方法添加到 Canvas class(使用 new 修饰符)否则,它将不再输出所需的结果,您必须意识到这一点。