2015-05-18 3 views
9

Существует класс, называемый кругом. Он содержит атрибуты 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); 

Но у меня есть такого рода предупреждения:

«статический метод вызывается с помощью производного типа»

Может кто-нибудь объяснить мне, что делает это имею в виду?

+0

В предположении, что 'Canvas' является подтипом другого типа, а' SetZIndex' определяется последним; а не «Холстом». –

ответ

8

SetZIndex определен на классе Panel, который происходит от Canvas. Компилятор генерирует предупреждение о том, что вы используете статический метод для подтипа. Это не проблема , но это может привести к путанице при использовании определенным образом. Поскольку SetZIndex недействителен, это не должно быть проблемой.

Но представьте себе следующее:

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

Create на самом деле статический метод WebRequest, но используется на HttpWebRequest вместо этого, потому что он является производным типа и вы может сделать это. Итак, вы ожидаете, что это будет веб-запрос, который создается, не так ли? Но это не так, он генерирует FtpWebRequest, потому что это указано в URI.

Edit:

Я хочу отметить, что, как правило, предупреждения компилятора есть по причине, что путь этот один также существует. До тех пор, пока не будет перегрузки SetZIndex, созданного в классе Canvas, звонок безопасен. Но, как отмечает @SriramSakthivel в комментариях, если какой-либо метод расширения или статический метод добавляется к классу Canvas (с использованием модификатора new) по пути, вами или кем-либо еще, он больше не будет выводить желаемый результат, а вы должен знать об этом.

+0

Пропущенные для подсказки предупреждения не являются проблемой. Хорошим советом было бы рассматривать предупреждения как ошибки и исправлять их. –

+0

Спасибо за ответ, теперь все ясно;) –

+0

@David Нигде я не пытался сказать, что все предупреждения не являются * проблемой *. Они там, чтобы указать, что что-то может быть неправильным. В этом конкретном случае предупреждение может быть безопасно проигнорировано. –

2

Это означает, что метод SetZIndex определен в базовом типе класса Canvas, но вы вызываете его с использованием последнего. Лучше не использовать базовый класс.

Смежные вопросы