在派生types上使用类的静态成员?

使用Resharper 4.1,我遇到了这个有趣的警告:“通过派生types访问types的静态成员”。 以下是发生这种情况的代码示例:

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 ,这将允许这种types的代码,如果通过派生类访问被写入。

 var request = (FtpWebRequest)HttpWebRequest.Create("ftp://ftp.example.com"); 

这里request的types是FtpWebRequest但是它很混乱,因为它看起来像是从HttpWebRequest (同级类) Create即使Create方法实际上是在WebRequest (基类)上定义的。 以下代码意义相同,但更清晰:

 var request = (FtpWebRequest)WebRequest.Create("ftp://ftp.example.com"); 

最终,通过派生types访问静态代码没有什么大问题,但是代码通常不是很清楚。

B.SomethingStatic()声明SomethingStaticB的成员。 这不是真的。 SomethingStatic明确地是A的成员。 B成员无法取得资格的情况(就好像它是B的成员一样)是方便的。 事实上,如果有资格获得B ,IMO就是一个错误。

这不是一个警告,通常只是一个build议。 你正在创build一个不必要的依赖。

假设你以后决定B不需要inheritanceA.如果你遵循了Resharper的build议,你将不需要修改那行代码。

是的,我也看到了,我一直认为这只是警告我,因为这是没有必要的。 A.SomethingStatic(); 会做同样的事情。