通过派生类型调用的静态方法
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
修饰符)否则,它将不再输出所需的结果,您必须意识到这一点。
有一种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
修饰符)否则,它将不再输出所需的结果,您必须意识到这一点。