使用Resharper 4.1,我遇到了这个有趣的警告:"通过派生类型访问类型的静态成员".以下是发生这种情况的代码示例:
class A { public static void SomethingStatic() { //[do that thing you do...] } } class B : A { } class SampleUsage { public static void Usage() { B.SomethingStatic(); // <-- Resharper warning occurs here } }
当通过B使用A的静态成员时,有没有人知道有什么问题(如果有的话)?
可能误导性的一个地方是静态是工厂方法,例如,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");
最终,通过派生类型访问静态没有什么大问题,但是代码通常不清楚.
B.SomethingStatic()
制作成为的SomethingStatic
成员的陈述B
.这不是真的. SomethingStatic
毫无疑问是其中的一员A
.事实上,它的成员不合格B
(就像它是其成员一样B
)是一个方便的问题.事实上,当它与B
IMO 合格时,它是可以访问的,这是一个错误.
通常,这不是一个警告,只是一个建议.您正在不必要地创建对某些内容的依赖.
假设您稍后决定B不需要继承A.如果您遵循Resharper的建议,您将不需要修改该行代码.