Swi*_*wim 73 c# resharper static
使用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
}
}
Run Code Online (Sandbox Code Playgroud)
当通过B使用A的静态成员时,有没有人知道有什么问题(如果有的话)?
Gre*_*ech 84
可能误导性的一个地方是静态是工厂方法,例如,WebRequest类具有工厂方法Create,如果通过派生类访问,则允许写入这种类型的代码.
var request = (FtpWebRequest)HttpWebRequest.Create("ftp://ftp.example.com");
Run Code Online (Sandbox Code Playgroud)
这request是类型,FtpWebRequest但它令人困惑,因为它看起来像是从HttpWebRequest(兄弟类)创建的,即使该Create方法实际上是在WebRequest(基类)上定义的.以下代码的含义相同,但更清楚:
var request = (FtpWebRequest)WebRequest.Create("ftp://ftp.example.com");
Run Code Online (Sandbox Code Playgroud)
最终,通过派生类型访问静态没有什么大问题,但是代码通常不清楚.
P D*_*ddy 30
B.SomethingStatic()制作成为的SomethingStatic成员的陈述B.这不是真的. SomethingStatic毫无疑问是其中的一员A.事实上,它的成员不合格B(就像它是其成员一样B)是一个方便的问题.事实上,当它与BIMO 合格时,它是可以访问的,这是一个错误.
Dan*_*ker 15
通常,这不是一个警告,只是一个建议.您正在不必要地创建对某些内容的依赖.
假设您稍后决定B不需要继承A.如果您遵循Resharper的建议,您将不需要修改该行代码.