Единственное место, где это может вводить в заблуждение, - это когда статический метод является заводским методом, например WebRequest
класс имеет фабричный метод Create
, который позволил бы писать этот тип кода при доступе через производный класс.
var request = (FtpWebRequest)HttpWebRequest.Create("ftp://ftp.example.com");
Здесь request
имеет тип FtpWebRequest
, но это сбивает с толку, потому что похоже, что оно было создано из HttpWebRequest
(родственный класс), даже если метод Create
фактически определен в WebRequest
(базовый учебный класс). Следующий код идентичен по значению, но более понятен:
var request = (FtpWebRequest)WebRequest.Create("ftp://ftp.example.com");
В конечном итоге нет серьезных проблем с доступом к статическим объектам через производный тип, но код часто становится понятнее, если не делать этого.